2016-06-12 8 views
0

インターネットを経由して、短いスリープを含む無限ループでクライアントからのメッセージを待つサービスを処理するいくつかの例を見てきました。例:真のループ中に短い睡眠を追加する点は何ですか?

while True: 
    check_messages_stack() 
    sleep(0.1) 

睡眠のポイントは何ですか?リソースを節約することになっていますか?それが何らかの資源を節約すれば、それは意味のある量になるでしょうか?

+0

質問は、文脈や詳細がなければ意味がありません。 – pvg

+1

CPUのサイクルが少なくて済みます。 whileループwhile 'while True:pass'と' while True:pass; sleep(.1) 'を実行すると、CPU使用量に違いが見られます –

答えて

0

sleep CPUリソースは使用しませんが、常に実行する場合は、check_messages_stack()(実行している内容によって異なる場合があります)を実行する必要がある場合は、CPUを休止させることをおすすめします。

0

機能は何のために待機していない場合、それは睡眠を追加することにより、100%のCPUを消費することになる、それはCPUに他の人のような他のプロセス

1

sleepを実行するためのいくつかの時間を与えるが言ってきたCPU使用率を緩和それに加えて、ネットワーク/ Webデータへのアクセスのようなものであれば、ホストサーバーをクラッシュさせたり、禁止するためにスリープが必要になります。

1

あなたのPCが動作している間、あなたのCPUは(あなたのPCを動かすために)多くのプロセスを実行する必要があります。 CPUは極端に高速ですので、複数のタスクを同時に行うことはできますが、実際には行っていません(現在は複数のコアCPUとmutithreadingがありますが、この説明は忘れてしまいます)。
これらのプロセスは、特定の時間内にプロセスの一部を実行した後、他のプロセスの一部が最初のプロセスに戻るなどの処理を行います。

単純な方法では、プロセスがあるI/Oを実行したり、ユーザーとのやりとりを待っているときなど、実際に実行しているプロセスでCPUが使用されていない場合、CPUは別のプロセスに切り替えることができます。

while trueを実行すると、できるだけ早くループして終了し、whileループの機能を実行します。 ASAPは現実のASAPを意味するので、他のプロセスは2つのループの間で何もできません。 CPUが連続的に処理しているためです。

sleepを入力すると、CPUに他の処理を実行させることができます。ランダムCPUは数十億回の操作をマイクロ秒で行うことができるため、スリープ状態の長さは実際にはわかりません。

あなたの質問では、sleep(0.1)は、CPUが2つのcheck_messages_stack()コールの間でsomme bilions操作を実行できるようにします。

詳細については、「CPUスケジューリング」を参照してください。