〜synchronous Node.js IPCを強制する
fork()IPC を使用して子プロセスを作成するノードサーバーがあります。ある時点で、子は長期実行タスクの一部として約10Hzで結果を親に送り返します。渡されたペイロードprocess.send()が小さい場合、すべてうまくいきます。送信するすべてのメッセージはすぐに受信され、親によって処理されます。 ただし、ペイロードが「大きい」場合(正確なサイズ制限を特定していません)、親がすぐに受信するのではなく、すべてのペイロードが最初に送信されます。子が実行されると、親が長期実行タスクを実行します。メッセージを処理します。 tl; dr visual: 良い(ペイロードが小さい場合): child: send() parent: receive() child: send() parent: receive() child: send() parent: receive() ... 悪い(大きなペイロードで発生): child: send() child: send() child: send() (repeat many times over many seconds) ... parent: receive() parent: receive() parent: receive() parent: receive() ... これはバグですか?(編集:動作はOS Xでのみ発生し、WindowsやLinuxでは発生しません) IPCペイロードを小さく保つ以外に、これを回避する方法はありますか? 編集2:以下のサンプルコードは、時間カウンターと反復カウンターの両方を使用して、更新を送信するタイミングを選択します。(実際のコードでは、n回の反復の後、またはループが特定の結果を達成した後に更新を送信することもできます。)ループの代わりにsetInterval/ を使用するようにコードを書き直すことは、setTimeout私にとって最後の手段です。機能を削除します。 編集:問題を再現するテストコードを次に示します。ただし、OS Xでのみ複製され、WindowsやLinuxでは複製されません。 …