次のように、Nginxのデフォルトとして「accept_mutex」が「オン」になっていることがわかりました。
では、接続を受け入れるにはミューテックスが必要ですか? なんで?
次のように、Nginxのデフォルトとして「accept_mutex」が「オン」になっていることがわかりました。
では、接続を受け入れるにはミューテックスが必要ですか? なんで?
一部のプロセスが 1 つのポートでリッスンし、epoll で待機しているとします。ミューテックスを受け入れないと、すべてのプロセスが起動しますが、接続を受け入れることができるのは 1 つだけです。他のプロセスは非生産的にウェイクアップしました。これはよく知られていますhttp://en.wikipedia.org/wiki/Thundering_herd_problem
しかし、それは話の終わりではありません。
多くの場合、または常に受け入れに失敗すると、コンテキストの切り替えが発生します: http://en.wikipedia.org/wiki/Lock_convoy
私のテストでは、ミューテックスを受け入れないと 5 ~ 10% のパフォーマンスが失われることが示されています。
更新: "accept mutex" は、accept の周りにロックされた単なる mutext ではありません。これは、ワーカー間のサーバー ポートでリッスンするシリアル化に使用されるテクノロジの名前です。特定のポートを一度にリッスンしているのは 1 つのワーカーだけです。