linux下阻塞,非阻塞,轮询 15

我知道阻塞,非阻塞的基本概念,但是有几个问题我一直不懂:第一,非阻塞是遇到错误后会返回,还是说会不停地去访问?就好比一辆车到了停车场,去到说没有停车位了,他是返回,还是不... 我知道阻塞,非阻塞的基本概念,但是有几个问题我一直不懂:
第一, 非阻塞是遇到错误后会返回,还是说会不停地去访问 ? 就好比一辆车到了停车场,去到说没有停车位了,他是返回,还是不停的在那里问有没有停车位 ?为什么我会查到这两种不同的解释。

第二,阻塞与非阻塞 ,哪一个占用CPU资源高,为什么?

第三,平时用阻塞多还是非阻塞多,什么情况下用阻塞,什么情况下用非阻塞

请不要在别的地方复制粘贴,如果能让我理解这两个概念,保证给你加分,感激不尽,谢谢
展开
 我来答
百度网友fcd50a409
2012-07-27 · TA获得超过691个赞
知道小有建树答主
回答量:1539
采纳率:0%
帮助的人:907万
展开全部
用浅显的话来说吧。

在一般的情况下,在系统和应用程序之间有一个请求队列层,起到调度的作用,应用程序不会直接访问系统,而是把访问请求放进队列层中;而系统也在不停的从队列层中提取请求然后不断的分发执行,这种请求方式就是阻塞式访问。

但是有些特殊的请求是不允许停止和等待的,这种请求就不会被放入队列层中,而是直接插入到系统的当前处理的前端,而被优先执行,这种请求方式就是非阻塞式访问。

这二者的区别是由于其工作性质决定的,单纯从理论角度来说,与CPU占用等没有任何关系,CPU占用只和和算法复杂度有关。

一般非阻塞功能都是使用在系统级的请求上,比如某些驱动级的中断请求或实时类请求,因为绕过了请求队列,编制不良的非阻塞程序可能会导致系统失去响应。
百度网友96246b2
2012-07-23 · 超过61用户采纳过TA的回答
知道小有建树答主
回答量:225
采纳率:0%
帮助的人:167万
展开全部
1,非阻塞是立即返回,那你的例子说就是,车会返回,一旦有空车位了,停车场就会通知你去停车
2,应该差不多,但是对应用程序来说,非阻塞的效率要高很多
3,一般都用非阻塞的,阻塞的好处是逻辑简单,容易处理;如果对程序的网络性能要求不高,但是逻辑处理比较复杂,那就用阻塞
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wujiaheng
2012-07-23 · TA获得超过232个赞
知道小有建树答主
回答量:258
采纳率:0%
帮助的人:261万
展开全部
阻塞了,应用程序就睡眠了,所以不会占用CPU。
不阻塞,一直忙等,才会占用CPU。
一般用阻塞多,注意一般与多线程配置实用。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
we5372
推荐于2016-09-03 · 超过26用户采纳过TA的回答
知道答主
回答量:64
采纳率:0%
帮助的人:48.7万
展开全部
非阻塞并不是不断的轮询,否则和阻塞也没有什么区别,而是直接返回,让你自己去处理请求不能满足的情况,就是你自己看到没有位置给你停车了,自己做决定是继续等待(循环非阻塞调用,当然没有必要,因为可以直接阻塞调用),还是去想别的办法停车。
至于占用的 cpu 资源应该相差不大,阻塞之后当前线程或进程放弃系统执行时间,直到条件满足,阻塞期间应该就是不会消耗太多资源,因为执行时间都不占用了。而非阻塞就只是一个调用而已,不满足就直接返回到当前程序了,所以两个应该差不多的。
平时用非阻塞的时候应该就是希望程序自己处理请求不能满足的情况了,而阻塞则是程序只有满足条件才可以继续执行,所以就一直阻塞等待着了,那个用多用少看使用的情况而定了。因为本身就是区别很明显的,功能并没交叉。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式