0

私がマルチタスクを読んだことは、コンテキスト切り替えが本当に速いスピードで起こっていて、並列性の錯覚を与えていることです。コンテキストの切り替えだけでなく、すべてのプロセスを同時に終了してもマルチタスクは可能ですか?

しかし、私は混乱しています。コンテクストの切り替えがあっても、データ全体を処理しなければならず、同時にCPUがどのようにそれを達成するのでしょうか?

たとえば、私はVLCで5分の長さの曲を聴きながら、KMPで5分の別の曲を聴いています。したがって、CPUは10分の長さのデータを処理する必要があります。しかし、両方の曲が同時に終わる。どのように可能ですか?私がいくつかの概念を誤解している場合は、修正してください。

シングルプロセッサとマルチコアプロセッサの両方に回答できますか?

+0

'コンテキストを切り替えてもデータ全体を処理する必要がありますが、同時にCPUがどのように処理するのですか?'ほとんどの場合、プロセス/スレッドはI/Oを待機しているため、I/Oが完了すると空きCPUが十分にあるためです。最新のプリエンプティブなマルチタスク・カーネルは、すべて高性能I/Oに関するものです。 CPUの実行は、IOや他のスレッドからの信号を待っているため、スレッドを使用できないスレッドから保留され、進行可能なスレッドに供給されます。複数のコアを持つだけで、カーネルがそれらのコアに準備スレッドをディスパッチする機会が増えます。 –

答えて

0

単一のCPUコアでのマルチタスク処理は、ただちにコンテキストを切り替えるだけの正しいことです。これは、マルチコアCPUを考えるときに少し複雑になりますが、その考え方はほとんど同じです。

オーディオデバイスは特に興味深い例です。それらには、CPUの介入なしに、自分自身でのサウンドを生成するための再生のためのバッファが用意されています()。マルチタスキングでどのように動作するかは、再生バッファーが低くなるとサウンドデバイスがOS(またはドライバー、またはアプリケーション)に通知し、バッファーをいっぱいにするのにCPU時間がかかります。幸運なことに、データをバッファに転送することは再生よりもはるかに速いため、CPUが他のすべての処理を行うことができます。

あなたのシステムにはもう1つのシステムがあります。システムのどこかに「ミキサー」が実装されています。時々これはサウンドカード上にありますが、それはOS上にあることもあります。ミキサーは、すべてのアプリケーションが再生したいサウンドを取り込み、それらをサウンドカードのバッファーに供給できる単一の再生ストリームに結合する役割を担います。幸いにも、ミキシングもあまり複雑すぎることはないので、それを再生するのにかかる時間と同じくらい、10秒間のオーディオをミックスする時間はほとんどありません。

+0

だから私は他のタスクもいくつかのバッファを持っていると思いますか?たとえば。他のアプリケーションを同時に実行することができます。 Keypressesは優先順位が高いので、ゲームをコントロールしながら即座に登録されます。私はそれを正しくしていますか? –

+0

はい。たとえば、Windowsでは、各ウィンドウにメッセージキューがあります。キーが押されるたびに、いくつかのメッセージが 'focus'でウィンドウに送られます。 1つのメッセージはキーが押されたことを示し、別のメッセージはキーが離されたことを示し、別のメッセージは文字が入力されたかどうかを示します。ウィンドウを所有するアプリケーションは、タイムスライスが来るたびにこれらのメッセージを処理します。参考までに、Windowsのコンテキスト切り替えのタイムスライスは約10ms(100コンテキストスイッチ/秒)だったので、キープレスのわずかな遅れに気付くことはありません。 – lockcmpxchg8b

+1

@ lockcmpxchg8b 'ウィンドウを所有しているアプリケーションは、タイムスライスが来るたびにこれらのメッセージを処理します。' - NO!これは、少なくとも、非常にひどく誤解を招くことです。利用可能なコアがある場合、メッセージを処理するアプリケーションスレッド(通常はGUIを管理するスレッド)は、メッセージが利用可能になると直ちに実行されます。 「タイムスライス」を待つことはありません。この高性能I/Oは、WindowsのようなプリエンプティブマルチタスクOSを使用する主な理由です。 –

関連する問題