Avatar
omochimetaru 10/8/2019 2:25 AM
あ、ひとつ発見しました
2:26 AM
concurrent queue + async(barrier)だと、
2:26 AM
async(barrier)の中身のタスクを実行するスレッドは、asyncを呼び出して投入したスレッドとは別になってますね
2:26 AM
つまり、asyncを呼び出した側はスレッドセーフな内部データ構造にタスクを登録してすぐに抜けていて
2:27 AM
asyncを処理する側は内部のスケジュールの後で同期を取ってほかを排他してから実行する、って挙動を必ず取るっぽい。
2:27 AM
syncの場合はsyncを呼び出したスレッドでそのままロックして待って、スレッドは切り替わらないので、
2:28 AM
やっぱり仕組み上のオーバーヘッドの差がかなりありそうです。
2:29 AM
concurrent+barrierでmulti-read/single-writeな構造を作るのが良いのはアプリとかで負荷のオーダーの見積もりが立つ場合だけじゃないすかねえ