今日、上司と私は、私が書いたコードについて話し合っていました。私のコードは、特定の HTTP/HTTPS リンクから 3 つのファイルをダウンロードします。3 つのファイルすべてが 3 つの別々のスレッドで同時にダウンロードされるように、ダウンロードをマルチスレッド化しました。この話し合いの中で、私の上司は、古いハードウェアとソフトウェア (Windows 2000 について話している) を実行している可能性が高い人々にコードが出荷されるだろうと私に言いました。
この時まで、スレッド化されたアプリケーションが古いハードウェアでどのように拡張されるかを考えたことはありませんでした。CPU が 1 コアしかない場合、スレッドが役に立たず、パフォーマンスがさらに低下する可能性があることを認識しています。このダウンロード タスクが I/O 操作であるかどうか疑問に思っていました。つまり、API が HTTP/HTTPS サーバーからの情報を待ってブロックされた場合、その間に何らかの計算を行う別のスレッドがスケジュールされますか? 古いOSはそのようなスケジューリングを行いますか?
彼が言ったもう 1 つのこと: コードは古いマシンで実行されるため、私のアプリケーションは CPU を消費するべきではありません。彼Sleep()
は、CPU を集中的に使用するタスクの後に呼び出しを使用して、他のプログラムに息抜きの余地を与えると述べました。現在、私は常にSleep()
、どのプログラムでも使用がひどいという印象を受けていました。私が間違っている?使用がSleep()
正当化されるのはいつですか?
ご覧いただきありがとうございます。