私のアプリケーションは次のように動作します: ワーカースレッドが初期化され、 pthread_cond_wait() で待機を開始します メインスレッドが DB に接続し、一度に 1 行ずつ適切なワーカーに渡し始めます
DB ドライバーの内部構造により、現在の行が抽出されるまで次の行を読み取ることができないため、メイン スレッドはワーカーが行を「受け入れる」まで待機する必要があります。
これは、メイン スレッド内で pthread_cond_wait() を呼び出すことで実現します。つまり、ワーカーからの pthread_signal() を待ちます。これは、Linux と FreeBSD の両方で問題なく動作しますが、通常、Linux ではさらに時間がかかります。FreeBSD では一貫して約 27 秒で 160 万行全体を処理しますが、Linux では通常 2 分以上かかります。Linuxボックスが同じ時間を表示する場合を除いて...
コードは同じソースからコンパイルされ、プログラムは同じ DB サーバーと通信します。どちらかといえば、Linux ボックスは DB と同じ LAN に配置されていますが、FreeBSD マシンは VPN 経由で接続されています (したがって、少し遅くなるはずです)。しかし、私を悩ませているのは Linux の結果の大きな不一致であり、スレッドの調整を疑っています...
これが私が今持っているものです:
MAIN THREAD WORKER
--------------------------------------------------------------------------
get new row
figure out, which worker it belongs to lock my mutex
lock the worker's mutex go into pthread_cond_wait
signal the worker extract the row's data
unlock the worker's mutex signal the main thread
go into pthread_cond_wait unlock the mutex
go on back to getting the next row go on to process the row's data
より良い方法はありますか?ありがとう!