Linux IO多重化

2850 ワード

ファイル記述子のステータスをリスニングして、対応する読み書き操作を行います.3つの関数:
1
2
3
select
poll
epoll
1
2
3
4
5
6
7
8
9
int (int nfds, fd_set *readfds, fd_set *writefds,
fd_set *exceptfds, struct timeval *timeout);

int poll(struct pollfd *fds, nfds_t nfds, int timeout);

int epoll_create(int size);
 Linux IO rd">int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
int epoll_wait(int epfd, struct epoll_event *events,
int maxevents, int timeout);
selectは、リスニングされた読み取り、書き込み、exceptの3種類のファイル記述子を別々に送信し、nfdsは最大1024個をサポートする.pollはselectに似ていますが、fdsには最大の制限はありません.select pollは、各fdの状態を1つずつポーリングする必要があり、各fdのユーザ空間データは、独立したcopy(カーネルコード:do_sys_poll->copy_from_user)を必要とする.epollは以上の2つの関数の拡張版であり、nfdsには最大の制限はなく、理論的にはシステムがサポートする最大ファイル記述子の個数と等しく、すべてのfdのユーザ空間データが一度にコピーされ、各fdの状態をポーリングすることなく、登録コールバックによって効率が著しく向上する.
各種I/Oブロック時間比較:
参考:Linux I/O詳細