Nginxのイベント駆動型について

KUSANAGI(7.8.2)のnginx.confの設定を見ていて、分からなかったこと

■user [user_name] [group_name]
ワーカープロセスを実行するユーザー名とグループ名
group_nameが省略された場合はuser_nameと同一とみなされる

KUSANAGIではhttpd wwwとなっていました。

■worker_process auto
起動されるnginxのプロセスの数。
経験則として、CPUネックの場合はプロセッサのコア数と同じ数にして、I/Oネックの場合はプロセッサのコア数の1.5から2倍がいいそうです。
参考:マスタリングnginx

KUSANAGIではautoとなっていました。
autoにするとコア数になるようです。

参考:nginx の worker_processes を auto にしたときの挙動

じゃあNginxはマルチスレッドなのかなと思ってちょっと調べるとNginxはイベント駆動型で、単一プロセスで全てのリクエストを処理するとのこと。
参考:Nginxが速い理由について調べてみた(基礎編)

どうにもマルチプロセス・マルチスレッドのような思想とは違うようで理解するのに時間がかかりました。
参考:高速・軽量・高機能……Nginxの基礎知識 (2/2)

マルチプロセスやマルチスレッドはリクエストに対して順次プロセスやスレッドを作成し、selectやpollといった同期I/Oの方式を使っているそうです。

これに対してイベント駆動型は単一プロセスだけどepollという、I/O多重化の仕組を用いているのでめっちゃ速い。
Apacheのevent MPMもepollを使っているそうです。

参考:ノンブロッキングと非同期I/Oの違い
参考:ノンブロッキングI/Oと非同期I/Oの違いを理解する

たぶんファイルディスクリプタをチェックするというのはプログラムの終了状態を確認するためなのかなーとか思っています。
よくわかっていませんが、ここを確認すると終了状態を見れるのかと。

参考:絵で見てわかるファイルディスクリプタ・パイプ・リダイレクト
参考:【Linux】ファイルディスクリプタとは何か【stream】

この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL