上网站建设公司东莞网站建设星河
news/
2025/9/23 3:21:22/
文章来源:
上网站建设公司,东莞网站建设星河,边个网站可以接模具做,成都网站seo推广本节讲解什么是非阻塞IO#xff0c;如何将文件描述符修改为非阻塞式 3.6.1.1、阻塞与非阻塞 #xff08;1#xff09;阻塞是指函数调用会被阻塞。本质是当前进程调用了函数#xff0c;进入内核里面去后#xff0c;因为当前进程的执行条件不满足#xff0c;内核无法里面完…本节讲解什么是非阻塞IO如何将文件描述符修改为非阻塞式 3.6.1.1、阻塞与非阻塞 1阻塞是指函数调用会被阻塞。本质是当前进程调用了函数进入内核里面去后因为当前进程的执行条件不满足内核无法里面完成操作就挂起这个进程去执行其他进程。默认使用阻塞IO 2非阻塞IO当条件不满足时直接停止当前操作退出程序。或者非阻塞IO条件不满足时会一直占用CPU资源 3结合程序状态转换图一起理解 3.6.1.2、为什么有阻塞式 (1)常见的阻塞wait、pause、sleep等函数read或write某些文件时 wait等待回收子进程当子进程没死父进程就不能回收子进程内核就阻塞住父进程知道子进程死去称为僵尸进程这时内核就会发一个信号给父进程父进程就会被唤醒去回收子进程。 (2)阻塞式的好处 非常有利于OS的性能发挥。阻塞时不会占用CPUCPU可以去执行其他。 3.6.1.3、非阻塞 (1)为什么要实现非阻塞 (2)如何实现非阻塞IO访问O_NONBLOCK和fcntl a -- 阻塞 阻塞操作是指在执行设备操作时若不能获得资源则挂起进程知道满足可操作的条件后再进行操作被挂起的进程进入休眠状态放弃CPU被从调度器的运行队列移走直到等待的条件被满足 b -- 非阻塞 非阻塞的进程在不能进行设备操作时并不挂起继续占用CPU它或者放弃或者不停地查询直到可以操作为止 二者的区别可以看应用程序的调用是否立即返回 驱动程序通常需要提供这样的能力当应用程序进行 read()、write() 等系统调用时若设备的资源不能获取而用户又希望以阻塞的方式访问设备驱动程序应在设备驱动的xxx_read()、xxx_write() 等操作中将进程阻塞直到资源可以获取此后应用程序的 read()、write() 才返回整个过程仍然进行了正确的设备 访问用户并没感知到若用户以非阻塞的方式访问设备文件则当设备资源不可获取时设备驱动的 xxx_read()、xxx_write() 等操作立刻返回 read()、write() 等系统调用也随即被返回。因为阻塞的进程会进入休眠状态因此必须确保有一个地方能够唤醒休眠的进程否则进程就真的挂了。唤醒进程的地方最大可能发生在中断里面因为硬件资源获得的同时往往伴随着一个中断。阻塞I/O通常由等待队列来实现而非阻塞I/O由轮询来实现。 转载于:https://www.cnblogs.com/Ocean-Star/p/9245364.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/911221.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!