kqueue IO多重化の使用記録
2416 ワード
シングルパス:IOはスレッド処理を専門に開きます.マルチパス:複数のIOが1つのスレッド処理を多重化します.(スレッド、メモリの節約)
kqueueはunixの次のIO多重ライブラリです.
リファレンスヘッダファイル
kqueueを作成し、ハンドルkqを取得し、kqでkqueueを操作します.
kqueueに関心のあるイベントを追加
上のコードはkeventが構造体であることを説明しています
kevent()はkqueueにイベントを追加したり、イベントをリスニングしたりすることができます.kevent()は呼び出しをブロックします.
kqueueでイベントの発生を傍受する
kqueueはsocket,ファイル変化,システム信号,タイマイベント,ユーザカスタムイベントを傍受することができる.
一般的にsocketのイベントを傍受するために使用され、読み取り可能かどうか、書き込み可能かどうかなど、大量のsocket IO要求を処理することができ、性能が高く、原理はオペレーティングシステムのI/O、および高性能IOモデルを参照してください.
ユーザーは、kqueueのオンまたは終了を制御するためにいくつかのイベントをカスタマイズできます.
タイマーイベント、GCDのdispatch_afterは、kqueueを直接使用したタイマイベントで、何秒間隔で何をするかを設定できます.
参考文献:kqueueドキュメントkqueue原論文kqueue例kqueueを用いてFreeBSD上で高性能アプリケーションサーバを開発する
kqueueはunixの次のIO多重ライブラリです.
リファレンスヘッダファイル
#include
#include
kqueueを作成し、ハンドルkqを取得し、kqでkqueueを操作します.
int kq = kqueue();
kqueueに関心のあるイベントを追加
struct kevent evt; //
EV_SET(&evt, sock, EVFILT_READ, EV_ADD | EV_ENABLE, 0, 0, NULL); //
kevent(kq, &evt, 1, NULL, 0, NULL); //
上のコードはkeventが構造体であることを説明しています
struct kevent {
uintptr_t ident; /* identifier for this event */
int16_t filter; /* filter for event */
uint16_t flags; /* general flags */
uint32_t fflags; /* filter-specific flags */
intptr_t data; /* filter-specific data */
void *udata; /* opaque user data identifier */
};
/* --- :--- */
ident key, socket , socket fd
filter , 15 ,
EVFILT_READ socket
EVFILT_WRITE socket
EVFILT_SIGNAL unix
EVFILT_TIMER
EVFILT_USER
flags ,EV_ADD ,EV_DELETE ,EV_ENABLE ,EV_DISABLE
fflags ,NOTE_TRIGGER
data int ,socket
udata , 。
kevent()はkqueueにイベントを追加したり、イベントをリスニングしたりすることができます.kevent()は呼び出しをブロックします.
int kevent( int kq,
const struct kevent *changelist,
int nchanges,
struct kevent *eventlist,
int nevents,
const struct timespec *timeout);
/* --- :--- */
kq kqueue
changelist kevent ,
nchanges changelist
eventlist , , kqueue
nevents eventlist
eventlist,kevent() , eventlist 。
timeout , ,
kqueueでイベントの発生を傍受する
struct kevent events[Max_Event_Count];
int ret = kevent(kq, NULL, 0, events, Max_Event_Count, NULL);
// kevent() , 。
// events kqueue
kqueueはsocket,ファイル変化,システム信号,タイマイベント,ユーザカスタムイベントを傍受することができる.
一般的にsocketのイベントを傍受するために使用され、読み取り可能かどうか、書き込み可能かどうかなど、大量のsocket IO要求を処理することができ、性能が高く、原理はオペレーティングシステムのI/O、および高性能IOモデルを参照してください.
ユーザーは、kqueueのオンまたは終了を制御するためにいくつかのイベントをカスタマイズできます.
タイマーイベント、GCDのdispatch_afterは、kqueueを直接使用したタイマイベントで、何秒間隔で何をするかを設定できます.
参考文献:kqueueドキュメントkqueue原論文kqueue例kqueueを用いてFreeBSD上で高性能アプリケーションサーバを開発する