美文网首页
对同步和异步、阻塞和非阻塞的理解

对同步和异步、阻塞和非阻塞的理解

作者: Mmmtooo | 来源:发表于2017-05-19 11:40 被阅读0次

    1、同步和异步是对调用双方之间的关系来说的

    比如 `A 调用 B `此处A和B可以同处同一线程也可处于不同线程

    a、如果A和B处于同一线程,并且A和B都是普通的函数或方法,那么B相对于A来说就是同步的

    b、如果A和B处于同一线程,但是此时B是一个协程或者是带有回调的函数或方法,那么B相对于A来说就是异步的

    c、如果A和B处于不同线程,那么毫无疑问B相对于A是异步的

    总结以上几种解释,当我们说到一个异步框架或者库的时候,要么这个框架或库是用的线程机制,要么用的回调机制,要么用的协程机制或者发布订阅,其实有的回调机制就是基于发布订阅的比如nodejs

    eg:比如我们说nodejs是一个异步框架,它底层的实现是基于uvloop和callback

    再比如说gevent是一个异步i/o库,它底层的实现是基于greenlet也就是一种协程,

    tornado也是一个异步框架,它的实现是基于ioloop和callback和nodejs类似,

    当然tornado也有协程,但是这个协程并不是真正的协程它仅仅简化了回调的使用而已。

    基于多线程、线程池的异步库比如boost.......

    2、阻塞和非阻塞是被调用者自身的机制来说的

    比如`A 调用 B`

    a、如果此时B内部存在sleep、while、read/write等耗时的i/o操作,那么就可以说B是阻塞的,从A的角度来看B没有立马返回,

    程序卡在对B的调用了

    b、相反如果A调用B,A并不急于等待B立马做完,B可以立马返回,A可以通过其它方式比如轮询、信号等方式获取B的结果,

    那么就可以说B是非阻塞的

    这样当同步、异步、阻塞、非阻塞搭配在一起的时候就可以理解了: 同步阻塞-这个理解起来很简单比如accept、

    同步非阻塞-比如setnoblocking的read/write、异步阻塞-这个没啥意义、异步非阻塞-比如select/epoll + callback

    相关文章

      网友评论

          本文标题:对同步和异步、阻塞和非阻塞的理解

          本文链接:https://www.haomeiwen.com/subject/lrcyxxtx.html