读书人

小弟我发现socket非阻塞和阻塞没本质区

发布时间: 2013-04-02 12:35:26 作者: rapoo

我发现socket非阻塞和阻塞没本质区别啊,求解惑
举最简单的例子,阻塞模式下
accept()函数,如果没有别的IP连进来,那么它就会一直等待。
而通常非阻塞解决办法就是用select()函数,但是select函数通常是一个while(1){}这样的循环,一直检测网络接口状态,要是没人连进来,它就一直在while()循环里面不出来,一样干不了其他事情,这和前面的一直等待有什么本质区别吗?

大家帮忙解惑一下啊
[解决办法]
假设你的摩托车跑60码上了高速,占用了车道

阻塞就是,你跑60码,你同一条车道后面的车也只能跟着跑60码。你占用了车道资源,但是不使用。

阻塞情况下,系统会分配时间片给你,你的accept发现木有连接来,虽然没有什么可以处理,还是占着时间片。
而非阻塞,就是你的accept发现没有连接来,OK,我可以选择把时间片主动让出去,让其他进程(线程)继续做要做的事情。当然,你也可以选择不让出时间片,这就跟阻塞没有什么区别了。

非阻塞情况下,让出时间片,可以提高系统资源利用率。

读书人网 >C++

热点推荐