0

非同期メソッド呼び出しに依存するアプリケーションをCで作成しています。クロスプラットフォームにするためのこれまでの最善の努力で、私は現在、次のようなコードを実装しています。

#ifdef TARGET_WINDOWS
//Windows threading API
#else
//pthreads API
#endif

おそらくそれを行うためのより良い方法があることを感謝しますが、それは私の質問のポイントではありません。私の質問は、シングルコアプロセッサのプログラムはどうなるのかということです。スレッドは引き続き非同期で実行されますか(おそらくインターリーブされた命令)、またはシングルコアCPUでのみシングルスレッドの実行に固執しますか?

4

3 に答える 3

2

結局のところ、1 つのコアは一度に 1 つのスレッドしか実行できません。スレッド スケジューラは、実行中のスレッドを中断し、別のスレッドに指定されたクォンタムを実行する機会を与えます。

正確に何が起こるかは、OS次第です。しかし、すべての作業が CPU バウンドである場合、おそらくいくつかの集中的な計算が行われると、コンテキスト切り替えのコストが原因で、スレッドが増えると全体的なパフォーマンスが実際に低下する可能性があります。ただし、たとえば I/O を待機している場合、OS はその間に別のスレッドを実行するようにスケジュールして、CPU を利用することができます。

于 2012-10-21T12:16:21.977 に答える
1

スレッドは、単一のコアでも同時に実行されます。これは、OS がスレッドを一時停止して他のスレッドを実行できるようにするプリエンプティブ スケジューリングによるものです。

これは、すべての一般的なデスクトップ OS に当てはまります。ただし、組み込み/「リアルタイム」OS は異なる場合があります。

于 2012-10-21T12:14:29.650 に答える
0

シングルコア CPU 上のスレッドはそれぞれ、静的優先度と動的優先度、実行中のプロセスの種類などのいくつかの要因に応じて、OS から小さなタイムスライスを順番に取得します。 ish) 単一の CPU での実行をインターリーブすることによって (実際には同時に) ファッションします。

于 2012-10-21T12:16:18.540 に答える