当前进程调用select函数时,会把当前进程从工作队列中取出来,然后把当前进程的引用放入你需要监听的socket的等待队列,socket包含三个部分,读缓冲区,写缓冲区,等待队列。当你的网卡有数据过来的时候,DMA设备会把数据写进内存,然后向cpu发起一个硬中断,cpu会保存当前的环境,取执行中断程序,cpu要做两件事,一是根据数据报TCP的首部的目的端口号找到对应的socket,将数据写进socket的缓冲区,然后唤醒在socket等待队列的进程,放进工作队列,然后会在就绪的socket的文件描述符中做个标记,标记它就绪了,然后select函数就执行完了,返回到Java层面,然后就是轮询每个socket,处理那个打标记的socket就可以了。
select函数的执行过程
最新推荐文章于 2024-04-29 16:23:48 发布