宁乡市住房和城乡建设局网站,做app推广去哪找商家,学校网站群建设,网站建设完成io深层理解 1.内核态2.用户态3. select IO多路复用执行原理4. select io多路复用限制和不足 1.内核态 一个进程会涉及多文件的修改#xff0c;比如说。那么在内核态就会维护一个表#xff0c;这个表叫文件描述符bitmap#xff0c;这个表会传递给内核态#xff0c;当然肯定传… io深层理解 1.内核态2.用户态3. select IO多路复用执行原理4. select io多路复用限制和不足 1.内核态 一个进程会涉及多文件的修改比如说。那么在内核态就会维护一个表这个表叫文件描述符bitmap这个表会传递给内核态当然肯定传递的是地址咯 用户态关心的文件执行select等待网络io回来。。。那么用户态将关心的fd_map 取地址传递给内核内核扫描这个fd_map,当然select的是一个最大为1024的bit数组这个fd_map对应索引为fd_id的位置上就会置为1传递给内核后内核空间会轮训这个map判断是否有数据到来并从网卡拷贝到了内核的数据缓存队列。
2.用户态
用户态执行select之后会阻塞等待数据到来注意此时进程内部的线程是挂起的进程也会挂起也就是说目前的线程是服从操作系统的调度可以干其他任务的。而当数据到来之后操作系统恢复上下文恢复寄存器变量等继续执行业务代码。
图文说明
3. select IO多路复用执行原理 将当前进程的所有文件描述符一次性地从用户态拷贝到内核态在内核中快速无差别地遍历每个id判断是否有数据到来将所有fd状态从内核态拷贝到用户态并返回已就绪的fd的个数在用户态遍历判断具体哪个fd已就绪然后进行相应的事件处理 4. select io多路复用限制和不足 文件描述符表为bitmap,有长度限制1024的限制fdset无法做到重用每次循环必须重新创建频繁的用户态和内核态的拷贝性能开销很大需要对文件描述符进行遍历O(n)的轮训时间复杂度