質問: javaではthread runnableといったものがあり、マルチタスクを 行うことができますね。その際に実際にjavaを通してCPU(複数Cpuがある場合)にマルチタスクをするように命じているという理解で正しいですか? 一つのCPUしかない場合は高速切り替えによってマルチタスクのように見せているのは理解できます。 複数CPUある場合でも、一つのCPUの高速切り替えでマルチタスクにするといったことはあるのでしょうか? 詳しい方回答よろしくお願いします
回答: マルチタスクという一般用語を用いておられますがここはJavaのスレッドについての質問なのでスレッドという用語を使います。 > > その際に実際にjavaを通してCPU(複数Cpuがある場合)にマルチタスクをするように命じているという理解で正しいですか? > > > よいと思います。 > > 複数CPUある場合でも、一つのCPUの高速切り替えでマルチタスクにするといったことはあるのでしょうか? > > > wikiをみただけですが現在のJavaVMはJavaのスレッドをネイティブスレッドにより実現しているようです。ですので、上の質問はOSのネイティブスレッドが特性のCPUにのみスレッドの実行を割り当てる状況があるか?という質問になると思います。 その質問は難しいので自分にはわかりませんが、「VirtualBoxなどの仮想環境でゲストOSを動かす際にいくつまでプロセッサを割り当てるか」などのオプションがあることから特殊な目的でそういったことをするソフトウェアがあると言えるでしょう。またオペレーティングシステムの深層では特定の状況でこういったことをする機能があるかも知れませんね。 余談 「高速切り替え」と表現されてますが・・・コンテキストスイッチという用語を使うのがよいと思います。CPU1でスレッドAが動いている状況において「コンテキストスイッチ」が発生し今度はスレッドBが動く・・・そんないいかたをします。