人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

素人な質問をさせてください。C言語でsleepというのがあります。また、win32 apiでも同様のものがあります。これらはcpu負荷を与えないのでしょうか?極端な例ですが、sleepするプログラムを100個くらい立ち上げたとき負荷はかからないのでしょうか?sleep関数自体がどのようなソースになっているのか知らないのでお聞きしています。sleep(10秒)と設定したらtimerにセットしているのでしょうか?

●質問者: mai_mai_mail
●カテゴリ:コンピュータ インターネット
✍キーワード:API CPU C言語 Win32 ソース
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● kn1967
●23ポイント

sleepは文字通り眠る形になり、CPU負荷はかけない。


OSのプロセス監視対象が100個どころか1000個になったからといって、

昨今のパソコンであれば、その監視に要する時間は数えるまでもない。

厳密な時間、スリープさせなければならないというような状況では、

OSのプロセス管理システムにまで言及せねばならなくなるので、以下割愛。


下記はLinuxのドキュメントの和訳になりますが、参考になるでしょう。

http://www.linux.or.jp/JF/JFdocs/IO-Port-Programming/high-resolu...

4.1.1. スリープ:sleep() と usleep()

さて、もっと簡単なタイミングについてお話しましょう。数秒のディレイが欲しい場合には、おそらく sleep() がいいでしょう。数十ミリ秒以上のディレイ(最小のディレイは約 10 ミリ秒のようです。)の場合には usleep() がお薦めです。これらの関数を呼び出すと、CPU は他のプロセスに割り当てられます(つまりプロセスが「眠る」)ので、CPU タイムが無駄になることはありません。詳細については sleep(3) と usleep(3) のマニュアルページをご覧ください。

約 50 ミリ秒よりも小さいディレイに関しては(おそらくプロセッサやマシンの速度、システムの負荷にも依存しますが)、上に述べたような CPU を放してしまうというアプローチではうまくいきません。通常、Linux のスケジューラがあなたのプロセスに対して制御を戻す前に(x86 アーキテクチャでは)少なくとも 10-30 ミリ秒はかかるからです。そのようなわけで、usleep(3) に小さいディレイを指定すると通常は指定した値をちょっとだけ越えるディレイが発生します。また最小の値は約 10 ミリ秒ということになります。


2 ● sirotugu40
●23ポイント

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1216095...

>sleep(10秒)と設定したらtimerにセットしているのでしょうか?

昔と最近とでは展開されるコードが違ってると思います。

昔だと、timerにセットするだけでも高付加なので・・・。

>sleepするプログラムを100個くらい立ち上げたとき負荷はかからないのでしょうか?

負荷はかかるけど、最近のCPU性能での前では無負荷に等しい。


>sleep(10秒)と設定したらtimerにセットしているのでしょうか?

win32 apiはその方式を採用していない。


3 ● mattn
●22ポイント

sleepを呼び出すと言うことは、プログラムを停止しカーネルに制御を預ける事になります。

CPUを酷使する様なループの中にsleepを入れるとCPU使用率が下がるのはこの為です。

ちなみにWindowsの場合はSleep()というAPIを使用します。

Sleep(1000); // 1秒スリープ

4 ● pyopyopyo
●22ポイント

Linux の場合だと、ソースコードは以下のようになっています。

まずsleep関数の中身。

http://www.google.com/codesearch/p?hl=ja&sa=N&cd=1&ct=rc#XAzRy8o...

このように内部はnanosleepというシステムコールで、ソースコードはこんな感じです。

http://lxr.linux.no/#linux+v2.6.31/kernel/compat.c#L126

http://lxr.linux.no/#linux+v2.6.31/kernel/posix-timers.c

で、実際にどれくらいCPU負荷が掛かるかですが、今時のOSとCPUの組合わせなら、負荷は微々たるものです。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ