[探讨]关于Socket阻塞与非阻塞模式及相关问题的疑惑

搬运工木木 软件工程师  2005-08-10 03:46:24
网上好像都说非阻塞比阻塞效率高
但在我理解中,非阻塞就是轮循,阻塞就是等待,轮循是耗用CPU资源的(当然轮循也可以通过某种方法来节约CPU资源吧?不过比系统自己实现的应该要差得远了吧?),等待却不是吧?这好像类似于硬件上轮循和中断的区别。
现在阻塞模式一般都在主循环中实现连接,然后把这个Socket交给线程或子进程去处理吧?
用一个线程或子进程控制一个阻塞的Socket本身没什么不好吧,不好之处是在于存在大量连接时子进程或线程量太多了。
完成端口(IOCP)技术上个人理解的优点是类线程池的实现吧,用少量线程把大量的 阻塞状态的Socket连接 管理起来,这才是他的优点吧? 难道他管理的那些 Socket连接 全是非阻塞的? 消息到达激活这种模式更倾向于阻塞模式而不是轮循模式吧? 他的底层实现应该是类似于消息分派吧,轮循?阻塞?好像是个死循环,不过内部应该有空闲时处理的方法吧?如果这个处理也是用消息激活的,那是不是又算阻塞了呢? 头大了。。。。。。。


另外,UNIX好像是采用阻塞模式的吧?那是不是说UNIX不能用于大用户访问量的服务器呢?
...全文
129 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
VCSQLVB 2005-08-10
阻塞一般用于快速达建架构,一旦框架完成,还是改为非阻塞的好。
回复
dirdirdir3 2005-08-10
应该差不多的吧,阻塞模式的一个好处是可以接收指定数量的字节才返回,好处理粘包问题。
回复
搬运工木木 2005-08-10
人烟稀少。。还是我问的问题太弱智了?
回复
DentistryDoctor 2005-08-10
主要满足不同的并发要求。
回复
发帖
网络编程
创建于2007-09-28

1.8w+

社区成员

VC/MFC 网络编程
申请成为版主
帖子事件
创建了帖子
2005-08-10 03:46
社区公告
暂无公告