码迷,mamicode.com
首页 > 其他好文 > 详细

004---IO模型

时间:2019-02-17 22:16:56      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:中介   一个   set   就是   结果   socket   sele   blocking   概念   

io模型

同步、异步、阻塞、非阻塞概念

  • 同步:发出一个功能调用时,在没有得到结果之前,该调用就不会返回,原地等待

  • 异步:相反,不需要等待

  • 阻塞:调用结果返回之前,当前线程会被挂起,如io操作,只有在得到返回结果之后,才会将阻塞的线程激活和同步不一样,不要混淆,同步虽然也在原地等待,但是它的线程还是激活的。

  • 非阻塞 相反

总结:

  • 同步与异步针对的是函数/任务的调用方式:同步就是当一个进程发起一个函数(任务)调用的时候,一直等到函数(任务)完成,而进程继续处于激活状态。而异步情况下是当一个进程发起一个函数(任务)调用的时候,不会等函数返回,而是继续往下执行当,函数返回的时候通过状态、通知、事件等方式通知进程任务完成。
  • 阻塞与非阻塞针对的是进程或线程:阻塞是当请求不能满足的时候就将进程挂起,而非阻塞则不会阻塞当前进程

IO模型

  • 阻塞IO:socket默认是阻塞的

    解决方案:使用多线程或多进程,但是问题是如果连接数太多,会严重占用计算机资源使用线程池或进程池,只是一定程度上缓解了,但是池子始终有上限。。。所以还是用非阻塞吧。

  • 非阻塞IO:用户进程其实是需要不断的主动询问kernel数据准备好了没有。

    server.setblocking(False)

    弊端:循环调用recv()将大幅度cpu占用率。检测操作是否完成,绝不被推荐

  • 多路复用IO:事件驱动模型
    select 代替我们去询问,相当于中介处理的连接数不是很高,还不如之前的,但是如果连接数非常大,效果显而易见的。

004---IO模型

标签:中介   一个   set   就是   结果   socket   sele   blocking   概念   

原文地址:https://www.cnblogs.com/xjmlove/p/10392754.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!