7

次のように、Nginxのデフォルトとして「accept_mutex」が「オン」になっていることがわかりました。

http://wiki.nginx.org/EventsModule

では、接続を受け入れるにはミューテックスが必要ですか? なんで?

4

3 に答える 3

4

一部のプロセスが 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 つのワーカーだけです。

于 2013-03-27T19:20:39.773 に答える