日進日歩で日々進捗

非情報系学生による技術の備忘録。進捗出していきたい

システムコール SELECT(2)について

### SystemCall SELECT(2)とは
端的にいうと、ある特定のプロセスがブロッキングすることなく、多数のI/Oストリーム(ファイルディスクリプタ)を監視することを可能にするシステムコールである。


### どこで使われているの?有名なアプリケーションは?
Webエンジニアの人であれば、多くの人が使ったことがある(少なくとも知っているであろう)nginxや、RDBMSのpostgresなどでも使われています。

通常、webサーバーでは多数のリクエストを処理しますが、その際各ソケットに対して、プロセスを割り当てた場合、メモリの使用量やコンテキストスイッチの負荷が大きくなってしまいます。
そこで、1プロセスで、複数のファイルI/Oを管理する仕組みが導入されました。それが、select(2)です。
ただ、selectにも課題はあり、1プロセスで多くのソケット(File Descriptor)を監視できる一方、そのプロセスには原則1つのプロセスしか割り当てられないので、負荷の高い処理が要求された場合、その処理がCPU時間を占有してしまい、結果としてそれぞれのsocketに対するレスポンスが遅くなってしまいます。


### epoll(7)やpoll(2)との違いは??
T.B.C .