• 同步/异步-阻塞/非阻塞



    (A)同步和异步,是针对 调用结果是如何返回给调用者来说的,即调用的结果是调用者主动去获取的(比如一直等待recvfrom或者设置超时等待select),则为同步,而调用结果是被调用者在完成之后通知调用者的,则为异步(比如windows的IOCP)。
    (B)阻塞和非阻塞,是针对调用者所在线程是否在调用之后主动挂起来说的,即如果在线程中调用者发出调用之后,再被调用这返回之前,该线程主动挂起,则为阻塞,若线程不主动挂起,而继续向下执行,则为非阻塞。

    这样,在网络IO中,同步异步,阻塞非阻塞,就可以形成2x2 = 4种情况 ,但由于 异步肯定是非阻塞的,所以有三种情况
    (1)同步阻塞: 调用者发出某调用之后(比如调用了read函数),如果函数不能立即返回,则挂起所在线程,等待结果;
    (2)同步非阻塞:调用者发出调用之后(比如read),如果当时有数据可读,则读取并返回,如果没有数据可读,则线程继续向下执行。在实际使用时,read调用会在一个循环中,这样就可以不断的读取数据(尽管可能某次read操作并不能获得任何数据);
    (3)异步非阻塞:调用者发出调用之后(如async_recv),线程继续进行别的操作,被调用的读操作由系统(或者库)来进行,等待有结果之后,系统(或者库)通过某种机制(一般为调用调用者设置的回调函数)来通知调用者。
  • 相关阅读:
    【MySQL】GTID小结
    MongoDB副本集--Secondary节点实例恢复
    【linux】glibc升级
    001.LVM简介
    008.FTP单独虚拟用户
    007.FTP虚拟用户访问
    006.FTP用户访问控制配置
    005.FTP本地用户访问
    004.FTP匿名用户访问
    003.FTP客户端连接
  • 原文地址:https://www.cnblogs.com/gtarcoder/p/5588978.html
Copyright © 2020-2023  润新知