同步异步、阻塞非阻塞

同步异步与阻塞非阻塞:python

  同步异步与阻塞非阻塞都是和IO相关的概念,阻塞非阻塞是与调用方相关的概念、而同步异步是被调用被相关的概念。同步异步说的是被调用者结果返回时通知进程的一种通知机制,阻塞非阻塞说的是调用结果返回前进程的状态,是挂起仍是继续处理其余任务。框架

 

同步和异步:异步

  同步请求,A调用B,B的处理是同步的,在处理完以前他不会通知A,只有处理完以后才会明确的通知A。tornado

  异步请求,A调用B,B的处理是异步的,B在接到请求后先告诉A我已经接到请求了,而后异步去处理,处理完以后经过回调等方式再通知A。spa

  总结:同步和异步最大的区别就是被调用方的执行方式和返回时机。同步指的是被调用方作完事情以后再返回,异步指的是被调用方先返回,而后再作事情,作完以后再想办法通知调用方。同步和异步是一种 消息通知机制, 是相对于被调用者而言的。线程

 

阻塞非阻塞:进程

  阻塞请求,A调用B,A一直等着B的返回,别的事情什么也不干。同步

  非阻塞请求,A调用B,A不用一直等着B的返回,先去忙别的事情了。非阻塞看似简单,可是在调用时须要增长线程或者进程进行业务处理,这样线程间切换的效率问题须要被评估。效率

  总结:阻塞和非阻塞最大的区别就是在被调用方返回结果以前的这段时间内,调用方是否一直等待。阻塞指的是调用方一直等待别的事情什么都不作。非阻塞指的是调用方先去忙别的事情。阻塞非阻塞 描述的是进程等待调用结果返回前的状态, 是相对于调用者而言的。请求

 

IO模型:

  BIO (Blocking I/O):同步阻塞I/O模式,即调用方阻塞等待,被调用方直处处理完成同步返回。

  NIO (Non-blocking I/O):主要指同步非阻塞I/O模式,即调用方非阻塞线程继续执行,被调用方同步处理并直接返回,主线程非阻塞执行,可是须要去不断地去轮询获取同步执行的状态,根据状态再作进一步的操做。

  AIO (Asynchronous I/O):异步非阻塞I/O模型,即调用方线程不阻塞,继续执行,被调用方异步处理,处理完成以后以通知的方式或者callback的方式通知主线程。python的celery很容易实现异步非阻塞的任务,python 的 tornado 框架就是一种异步非阻塞框架。

相关文章
相关标签/搜索