pthreads を使用するマルチスレッド アプリケーションがあります。私はミューテックス()ロックと条件変数()を持っています。2 つのスレッドがあり、1 つのスレッドが 2 番目のスレッド (ワーカー) のデータを生成しています。2 番目のスレッドは、生成されたデータをリアルタイムで処理しようとしており、1 つのチャックが可能な限り一定時間の経過に近づくように処理されます。
これは非常にうまく機能しますが、ワーカー スレッドが待機している状態をプロデューサー スレッドが解放するとき、ワーカー スレッドが制御を取得して再度実行するまでに、最大でほぼ 1 秒の遅延が見られることがあります。
私がこれを知っているのは、プロデューサーがワーカーが待機している条件を解放する直前に、別のチャックを処理する時間になるとワーカーの処理のチャックを行い、ワーカー スレッドで条件を受け取るとすぐに、それも行うためです。別のチャックを処理する時が来たら、処理のチャック。
この後者のケースでは、チャックの処理が何度も遅れていることがわかります。この効率の低下を解消し、チャックのカチカチ音をできるだけ望ましい周波数に近づけるためにできることをしたいと思います。
プロデューサーからの解放条件と、ワーカーが処理を再開するようにその条件が解放されたことが検出されるまでの遅延を減らすためにできることはありますか? たとえば、プロデューサーが何かを呼び出して、自分自身を強制的にコンテキスト スイッチ アウトにすることは役に立ちますか?
要するに、ワーカーは、プロデューサーに作業を作成するように要求するたびに待機する必要があるため、プロデューサーはワーカーのデータ構造をいじってから、ワーカーに再び並列実行する準備ができていることを伝えることができます。このプロデューサーによる排他的アクセスの期間は短いはずですが、この期間中に、プロデューサーが排他的アクセスを持っている間に、ワーカーに代わってプロデューサーが実行するリアルタイムの作業も確認しています。どういうわけか、再び並列実行に戻ると、回避したい大幅な遅延が発生することがあります。これを最もよく達成する方法を提案してください。