Bitcoinの自動renice

2 件のメッセージ サトシ・ナカモト 2010年3月15日 — 2010年7月14日

各スレッドに異なる優先度を設定している。生成スレッドはPRIO_MINで実行される。他のスレッドはCPUをほとんど使用せず、通常の優先度で実行される。

#define THREAD_PRIORITY_LOWEST PRIO_MIN #define THREAD_PRIORITY_BELOW_NORMAL 2 #define THREAD_PRIORITY_NORMAL 0

Windowsの優先度から変換された優先度は、おそらく以下のようなテーブルに基づいている:

「以下のテーブルはnice値とWin32優先度の対応を示しています。Win32の優先度に関する詳細はSetThreadPriority()のWin32ドキュメントを参照してください。

nice値 Win32優先度 -20 to -16 THREAD_PRIORITY_HIGHEST -15 to -6 THREAD_PRIORITY_ABOVE_NORMAL -5 to +4 THREAD_PRIORITY_NORMAL +5 to +14 THREAD_PRIORITY_BELOW_NORMAL +15 to +19 THREAD_PRIORITY_LOWEST」

より良い値があれば、提案を歓迎する。

また、Linuxではスレッドがプロセスであるためにプロセスに使用されるPRIO_PROCESSについてのウェブ上のアドバイスがあった。それが正しくない場合、アプリ全体の優先度を予期せず設定してしまっている原因かもしれない。

// Linuxではスレッドはプロセスなので、PRIO_PROCESSは1つのスレッドだけに影響する
setpriority(PRIO_PROCESS, getpid(), nPriority);

Laszloがこれを修正したが、残念ながら0.3.0に間に合わなかった。ただ、おそらく近いうちに0.3.1が出るだろう。

問題は、PRIO_MINを使用していたことだ。最低優先度にはPRIO_MAXを使うべきだった。OSは優先度を上げさせないようになっているので、PRIO_MINは優先度0のまま残すはずだ。