.NET のワーカー スレッドと I/O スレッドの詳細でありながら単純な説明を見つけるのは非常に困難です。
このトピックに関して私に明らかなこと(ただし、技術的に正確ではないかもしれません):
- ワーカー スレッドは、作業に CPU を使用するスレッドです。
- I/O スレッド (「完了ポート スレッド」とも呼ばれる)は、デバイス ドライバーを使用して作業し、基本的に「何もしない」必要があり、CPU 以外の操作の完了のみを監視する必要があります。
不明な点:
- メソッド ThreadPool.GetAvailableThreads は両方のタイプの使用可能なスレッドの数を返しますが、I/O スレッドの作業をスケジュールするパブリック API はないようです。.NET でワーカー スレッドを手動でのみ作成できますか?
- 単一の I/O スレッドで複数の I/O 操作を監視できるようです。本当ですか?もしそうなら、ThreadPool がデフォルトで利用可能な I/O スレッドを非常に多く持っているのはなぜですか?
- 一部のテキストでは、I/O スレッドによって I/O 操作の完了が実行された後にトリガーされるコールバックを読みました。本当ですか?このコールバックが CPU 操作であることを考えると、これはワーカー スレッドのジョブではないでしょうか。
- より具体的に言えば、ASP.NET 非同期ページは I/O スレッドを使用しますか? ワーカー スレッドの最大数を増やすのではなく、I/O 作業を別のスレッドに切り替えることで、パフォーマンス上の利点は何ですか? 単一の I/O スレッドが複数の操作を監視しているためですか? または、I/O スレッドを使用すると、Windows はより効率的なコンテキスト切り替えを行いますか?