私はC#経由で本のCLRを通して自分の道を作り続けてきました。私は第28章でI/Oバウンドスレッドについて話しています。I/Oが完了するのを待ってから.NETタスクを続けることができますか?
ここに私が理解していると思います。各スレッドには独自のスタックがあります。あなたが非同期を使用していて、あなたのIOにまで(そしてあなたのIOを含む)待っているとき、システムはデバイスのIRPキューにIO要求パケット(IRP)を送ります。 IO操作が完了すると、完了したIRPはスレッドプールに "戻る"状態に戻り、スレッドプールはリソースをに割り当て、非同期処理がオフの場合はを実行します。
質問:CLRスレッドがIOデバイスに制御を渡すと、そのCLRスレッドはどうなりますか?そのスレッドのスタックはすべてポップされてスレッドプールに返されますか?そして、もしそれが再利用されるようになったら、I/Oが完了するのを待っているプロセス状態の継続に不可欠なスタックではありませんか? IOが完了したときに元のCLRスレッドが(逐次的に)どこにあったのか、コンピュータはどのように知っていますか? をどこで中止したかを知る方法は?
あなたがダウン投票に行く場合は、コメントを残してください!私はそれが良い質問だと思った。 – Trevor
MSDN技術記事を含むドキュメントは、このようなものの内部動作に関する詳細情報を得るのにはるかに良い場所です。特に、あなたが扱っている特定のI/Oデバイスと使用しているAPIに応じて、実際にはWindowsでの非同期I/Oの利用可能なメカニズムがいくつか存在します。 –
最も一般的なシナリオの1つは、IOCPで待機するためにいくつかの少数のスレッドが作成され、専用されるI/O完了ポートを使用することです。このメカニズムを使用すると、単一のスレッドが多数の操作のためにI/O完了を処理できるため、スレッドプールを効率的に使用できます。 –