Select,poll,epoll
2020-04-07 12:11:37 2 举报
Select Poll EPoll 原理解释
作者其他创作
大纲/内容
FDS
进程C
epoll0()
工作队列
Socket2
+rbn+rdlink+next+ffd+nwait+pwqlist+eq+fllink+event
Socket3
内核空间
文件列表 fd
------------------------------------------------------
网卡解析协议数据
JDK - Native
2
进程A
返回有数据活动的Socket列表
等待队列
3
...
Socket1
selector.select()
进程B
3000
A
A线程
1
..
eventpoll
阻塞,等待有数据到来
线程B
传入主动唤醒需要的pollWrapper,需要监视的SelectionKey列表,用于返回可读、可写事件列表的引用
找到该Socket对应的Key,根据Key被设置的响应事件,来设定返回的事件(acceptAble)并通过传入的引用返回
FDList
唤醒
Socket2
2.中断
系统select、epoll
eventpoll
线程A
Socket1
线程C
select
JDK - JAVA
Socket
发送缓冲区。。
系统内核
B线程
执行中断程序
等待列表
返回活动的SelectionKey列表
ServerSocketChannel.open();
网络协议数据包
selector.selectedKeys()获取并遍历这个Key列表,跟据返回的Key中的事件来做相应的操作
epoll :epoll_wait
阻塞等待有数据到来
进程A Read
计算机B
epoll : epoll_create , epoll_ctl
网卡
4 拷贝完成,唤醒线程A
?
3.拷贝数据到Socket接收缓冲区
接收缓冲区。。
Socket2接收数据,唤醒线程A
Socket3
CPU
有数据活动
应用线程
建立主动唤醒selector需要用的Pipe,封装成pollWrapper
计算机A
selector.open()
java nio
new Socket
所有需要等待该 Socket 事件的进程
epitem
+lock+mtx+wq+poll_wait+rdlist+rbr+ovflist+user
收藏
收藏
0 条评论
回复 删除
下一页