8プロセッサ・マシン上でこのスクリプトを検討:私の非同期コールをCPUの数に応じてチャンクに分割する必要がありますか?
int parallel_function(int i){
system(some_complex_and_long_call);
return i;
}
int main() {
// Parallel run
std::vector<std::future<int>> futures;
for(int i = 30; i > 0; i--) {
futures.push_back (std::async(std::launch::async, parallel_function, i));
}
std::cout << "Stuff submitted" << std::endl;
for(auto &e : futures) {
std::cout << e.get() << std::endl;
}
return 0;
}
これは、非同期で30回のシステムコールを起動しますが、私はわずか8つのプロセッサを有し、各システムコールは(iは必要がありますね)の100%を使用することができシングルプロセッサ。
一度に8つのコール(またはさらに7つのプロセッサをフリーにしておく)を実行するか、それは問題ではありません。より速く走るのはなぜですか?
もう1つの質問: void
関数を非同期で呼び出すことはできますか、関数は何かを返す必要がありますか?
おそらく。多分。多くのものに依存します。なぜそれを試してみてはどうですか?とにかく、インターネットがあなたに何を伝えても、それは確かな唯一の方法です。 – Useless
@Useless確かに私は試してみることができます、問題は私のシステムコールが実行する月のようなものです(彼らは高価なシミュレーションです)ので、最初に尋ねるかもしれませんが、より良いかもしれません:) –
@GáborErdősそれはあなたのために仕上げる必要はありませんすべてのCPUリソースを消費しているかどうかを確認します。 – xaxxon