博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
select函数的执行过程
阅读量:3961 次
发布时间:2019-05-24

本文共 326 字,大约阅读时间需要 1 分钟。

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

转载地址:http://yhhzi.baihongyu.com/

你可能感兴趣的文章
类结构定义
查看>>
Windows下关于多线程类 CSemaphore,CMutex,CCriticalSection,CEvent,信号量CSemaphore的使用介绍
查看>>
图像处理基本算法(汇总)以及实现
查看>>
C++编程获取本机网卡信息 本机IP 包括Windows和Linux
查看>>
C++连接CTP接口实现简单量化交易
查看>>
服务端使用c++实现websocket协议解析及通信
查看>>
C# string.Format使用说明
查看>>
Linux下安装Mysql数据库开发环境
查看>>
Linux用户及用户组添加和删除操作
查看>>
通用 Makefile 的编写方法以及多目录 makefile 写法
查看>>
C++的4种智能指针剖析使用
查看>>
RPC框架实现之容灾策略
查看>>
Docker私库
查看>>
hdu——1106排序(重定向)
查看>>
hdu——1556Color the ball(树状数组)
查看>>
hdu——1541Stars(树状数组)
查看>>
快速幂的精简代码
查看>>
求大数乘方的前n位数字(对数加快速幂)
查看>>
hdu——2602Bone Collector(第一类背包问题)
查看>>
hdu——1711Number Sequence(kmp专练)
查看>>