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