イベントを待つCでプログラムを書いてから、system()
関数で外部システムコマンドを実行しました。Cで高速プロデューサ/スローコンシューマ
while(true){
wait_for_event();
system("cmd");
}
私はこの上seriuos問題を抱えている、cmd
は重いコマンドであり、私のアプリは、この時間枠内でいくつかのイベントをミス、完了するのに数秒かかります。
だから私は別のプログラムに、非常に重いですsystem
機能を、移動することを決めた、だから私は、次のように私のプログラムを変更:
while(true){
wait_for_event();
write_to_fifo("cmd");
}
と、別のプログラムを書いた:
while(true){
system(read_from_pipe());
}
をが、プロデューサー(第1プログラム)が消費者(第2プログラム)よりも速く書くと、消費者はいくらかのデータを逃してしまいます。
この問題を解決する方法はありますか?
スレッドを使用してイベントをキャプチャし、キューに追加し、コンシューマにキューからプルします。 – Falmarri
複数のスレッドを使用して、プロデューサをシングルスレッドにしたまま消費者の負担を軽減することは可能ですか?確かに、それは失われつつある戦いですが、あなたの要件を満たせばあなたを救うのに十分かもしれません。余分なスレッドが余りにも多くなりすぎても、データストアを調べる必要があります。 – pickypg
パイプをどのようにセットアップしますか?もちろん、処理できるデータよりも多くのデータを継続的に取得すると、何かが「与える」ことになります。しかし、パイプを使って大量のデータをゆっくりと処理することは全く可能です。さもなければ、 'cat myprog.c | gcc -o myprog'を実行することはできません - 時にはgccがかなり遅くなるので、catはできるだけ早くパイプにプッシュします。 –