004---IO模型

io模型

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

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

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

  • 阻塞:调用结果返回以前,当前线程会被挂起,如io操做,只有在获得返回结果以后,才会将阻塞的线程激活和同步不同,不要混淆,同步虽然也在原地等待,可是它的线程仍是激活的。socket

  • 非阻塞 相反函数

总结:

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

IO模型

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

    解决方案:使用多线程或多进程,可是问题是若是链接数太多,会严重占用计算机资源使用线程池或进程池,只是必定程度上缓解了,可是池子始终有上限。。。因此仍是用非阻塞吧。server

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

    server.setblocking(False)事件

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

  • 多路复用IO:事件驱动模型
    select 代替咱们去询问,至关于中介处理的链接数不是很高,还不如以前的,可是若是链接数很是大,效果显而易见的。同步

相关文章
相关标签/搜索