参考:https://www.cnblogs.com/Anker/p/5965654.html
同步:执行一个操作之后,等待结果,然后才继续执行后续的操作。
异步:执行一个操作后,可以去执行其他的操作,然后等待通知再回来执行刚才没执行完的操作。
阻塞:进程给CPU传达一个任务之后,一直等待CPU处理完成,然后才执行后面的操作。
非阻塞:进程给CPU传达任我后,继续处理后续的操作,隔断时间再来询问之前的操作是否完成。这样的过程其实也叫轮询。
阻塞、非阻塞、多路IO复用,都是同步IO,异步必定是非阻塞的,所以不存在异步阻塞和异步非阻塞的说法。真正的异步IO需要CPU的深度参与。换句话说,只有用户线程在操作IO的时候根本不去考虑IO的执行全部都交给CPU去完成,而自己只等待一个完成信号的时候,才是真正的异步IO。所以,拉一个子线程去轮询、去死循环,或者使用select、poll、epool,都不是异步。
煮开水:
1:老张立等开水烧开-》同步,阻塞
2:老张时不时看看开水有没有开,同步非阻塞
3:换响水壶,水开了会通知老张,异步非阻塞
异步都是非阻塞的,所以没有异步阻塞,异步非阻塞的说法。
同步:老张要主动去获取水有没有烧开。
异步:老张不用管水有没有烧开(IO执行),完全交给(CPU处理),水烧开会自动通知老张。
阻塞:针对老张,一直等
非阻塞:针对老张,可以去做别的