阻塞模式与非阻塞模式
来源:互联网 发布:制作微视频的软件 编辑:程序博客网 时间:2024/05/21 16:12
这两天在看一个FTP客户端的代码,里面用到了socket的非阻塞模式。之前没有接触个这方面。看了下APUE,里面只是简单说了下,这个是文件状态标志。。在linux下什么都是以文件形式存在的,设备也是。访问设备可以通过文件描述符来访问。刚开始我还以为,一个文件设置个非阻塞模式或是阻塞模式干什么用,难道阻塞模式就打开文件,什么都不干,干等着阿。。于是我谷歌。发现只有在设备和网络使用阻塞和非阻塞模式。正好我就是看FTP客户端代码,这个是网络的。很多都说非阻塞模式就是立即返回,阻塞模式就是等待。在设备上用的时候,用非阻塞模式可以立即返回,这样在多个设备上操作的时候,不用等待某个设备,立即返回访问别的设备。我就疑惑了,那个FTP客户端是单进程的阿,又没有别的套接字了,那阻塞和不阻塞有什么区别,为什么要用阿。于是找书再谷歌~~。才发现read,revc,connect等函数都是会使socket阻塞的,那阻塞就阻塞了,不是要等到这些函数有数据返回才好进行下一步么。再看书,看 《unix网络编程》里面的非阻塞IO部分,里面说,在阻塞模式下,read函数必须要到有数据读才回返回,如果没有数据返回那就一直等待,这样会浪费很多时间。想想也是阿,还有connect函数,要进行三路握手。不是一connect就能立即连上,在返回的过程中要等待,时间可长可短。如果一直干等着就会浪费掉时间,这个时候如果用非阻塞模式的话,就能在等待connect返回的时候干掉别的事。。我用connect做了个实验
结果是:
cczp@cczp-desktop:~/programs/socket$ ./noblockFtp 192.168.0.155 21
no connect~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
nonononononononnoonononooo
connecteddddddddddddddddddddddddddd
在等待connect成功返回的时候,connect语句下面的语句被执行了,如果不是阻塞模式,那么一直等到connect成功返回才会执行,就上面的代码来说,就算connect成功返回,connect下面的语句也不会执行,仅执行done: 的语句。。
- 阻塞模式与非阻塞模式
- java 阻塞模式与非阻塞模式
- java 阻塞模式与非阻塞模式
- java 阻塞模式与非阻塞模式
- 阻塞模式与非阻塞模式
- 非阻塞模式与阻塞模式
- 多路复用与设置阻塞、非阻塞模式
- socket的阻塞与非阻塞模式
- Socket 阻塞与非阻塞模式
- socket阻塞与非阻塞模式区别
- Socket 阻塞与非阻塞模式
- Socket 阻塞与非阻塞模式
- socket阻塞与非阻塞模式
- Socket 阻塞与非阻塞模式
- Socket 阻塞与非阻塞模式
- TcpListener 阻塞、非阻塞模式
- socket阻塞非阻塞模式
- Linux下socket阻塞模式与非阻塞模式
- 读 《小言 皇帝内经 与生命科学》
- 在学习中成长自己
- JSP中两种包含指令标签区别
- char[] char数组 char*返回值的问题
- windows安装基于Apache的SVN服务器(包括SSL配置)[2007-8-19更新]
- 阻塞模式与非阻塞模式
- 龙芯fuloong2f 内核编译简略总结
- POJ 1191棋盘分割
- Client copy出错
- 软件开发项目计划编制过程[转]
- Web 四个作用域(scope)的用处
- 把一个数组里的数组合全部列出,比如1 2 列出来为1,2,12,21
- 16个经典面试问题的回答思路
- 持续集成工具的选择 (转自http://www.javaeye.com/topic/482658)