手法 | メリット | デメリット |
---|---|---|
select | メモリやリソース消費が抑えられる | 扱えるディスクリプタに制限がある 一つのソケットの送受信処理の間に他のソケットを扱えない |
poll | メモリやリソース消費が抑えられる ディスクリプタ制限なし |
一つのソケットの送受信処理の間に他のソケットを扱えない |
EPOLL | pollの高速化版 ディスクリプタ制限なし |
一つのソケットの送受信処理の間に他のソケットを扱えない |
fork | 処理待ちソケットがあまり発生しない | プロセス生成コストが大きい |
thread | 処理待ちソケットがあまり発生しない | スレッドの生成コストとコネクション分のスタック領域を消費する |
pre-fork | 処理待ちソケットがあまり発生しない プロセス生成コストが起動時しかない |
データの受け渡しとロック処理、プロセスの管理の手間 |
pre-thread | 処理待ちソケットがあまり発生しない スレッド生成コストが起動時しかない |
データの受け渡しとロック処理、スレッドの管理の手間 |
EPOLL+thread | メモリとリソース消費を抑えつつ、待ち時間を最大限に低くできる | スレッド生成コスト。データの受け渡しとスレッド管理の手間 |
EPOLL+pre thread | メモリとリソース消費を抑えつつ、待ち時間を最大限に低くできる | データの受け渡しとスレッド管理の手間がより複雑だが、うまく実装すれば完璧なパフォーマンスを出すはず |