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



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

    这样,在网络IO中,同步异步,阻塞非阻塞,就可以形成2x2 = 4种情况 ,但由于 异步肯定是非阻塞的,所以有三种情况
    (1)同步阻塞: 调用者发出某调用之后(比如调用了read函数),如果函数不能立即返回,则挂起所在线程,等待结果;
    (2)同步非阻塞:调用者发出调用之后(比如read),如果当时有数据可读,则读取并返回,如果没有数据可读,则线程继续向下执行。在实际使用时,read调用会在一个循环中,这样就可以不断的读取数据(尽管可能某次read操作并不能获得任何数据);
    (3)异步非阻塞:调用者发出调用之后(如async_recv),线程继续进行别的操作,被调用的读操作由系统(或者库)来进行,等待有结果之后,系统(或者库)通过某种机制(一般为调用调用者设置的回调函数)来通知调用者。
  • 相关阅读:
    HDU-ACM课堂作业 Degree Sequence of Graph G & Frogs' Neibroghood
    HDU-ACM课堂作业 Least Common Multiple
    HDUOJ 悼念512汶川大地震遇难同胞——老人是真饿了
    HDUOJ 1236 排名
    HDUOJ Quicksum
    HDUOJ 2560 The Seven Percent Solution
    1255 迷宫问题
    1253 抓住那头牛
    1254 走出迷宫
    1252:走迷宫
  • 原文地址:https://www.cnblogs.com/gtarcoder/p/5588978.html
Copyright © 2020-2023  润新知