FC2ブログ

selectとepollの違い

ここのチャットサーバはsocketのIOを行うために、selectまたはepollを使っています。
実際はコンパイルオプションでどちらかにするかを決めているのですが、
epollの方が速いので実質的にはepollを使っていることになります。

さて、selectとepollの違いですが以下のような感じです。

select


selectは以前のkernelから実装されている方式で、アプリケーションに呼ばれる度に監視下のディスクリプタセットをkernelに渡し、kernelは渡されたリストに対しstateを更新して送り返します。送り返されたディスクリプタからready状態のディスクリプタをピックアップするためにアプリケーションはファイルディスクリプタを一つ一つ見に行かないといけないため、O(n)の計算量が必要となります。そのため、管理するファイルディスクリプタの数が増えるとパフォーマンスが落ちます。また管理できる数が限られているため、その数を超えるときには利用できません。

epoll


Linux Kernel 2.6から追加された方式で、ディスクリプタのstateがkernel内で管理されます。select(2)やpoll(2)の様に呼ばれる度にディスクリプタセットをkernelに送る必要もなく、無駄にディスクリプタセットをループする必要がなくなります。またkernelが管理しているので、変わったものに対して通知できるので、kernelの負担を下げることになります。O(1)の計算量で計算できるようです。

こういった特徴からepollが多く使われているようです。

http://chattera.net/
スポンサーサイト

コメントの投稿

非公開コメント

プロフィール

chattera.net

Author:chattera.net
フリーでソフト開発の仕事をしています。
自作したこのチャットシステムは、何か世の中に役に立つこともあるかと思いますので、お呼びがかかるとうれしいですね。

連絡先は chatteranet@gmail.com です。

また、ソフト開発関連のお誘いもうけたまわっております。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR