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

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


另外,UNIX好像是采用阻塞模式的吧?那是不是说UNIX不能用于大用户访问量的服务器呢?
...全文
210 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
VCSQLVB 2005-08-10
  • 打赏
  • 举报
回复
阻塞一般用于快速达建架构,一旦框架完成,还是改为非阻塞的好。
dirdirdir3 2005-08-10
  • 打赏
  • 举报
回复
应该差不多的吧,阻塞模式的一个好处是可以接收指定数量的字节才返回,好处理粘包问题。
搬运工木木 2005-08-10
  • 打赏
  • 举报
回复
人烟稀少。。还是我问的问题太弱智了?
DentistryDoctor 2005-08-10
  • 打赏
  • 举报
回复
主要满足不同的并发要求。

18,363

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧