同步和异步
同步:需要等待结果有返回才进行下一步,否则原地等待
异步:不需要等待结果是否有返回就进行下一步
区别:对是否需要立即返回是否关心
阻塞和非阻塞
阻塞:线程挂起,也就是此线程不再进行其他操作
非阻塞:线程不挂起,依旧能进行操作,也就是程序正常运行的状态
区别:线程是否挂起
总结
- 异步没有所谓的阻塞和非阻塞之分,同步才有阻塞和非阻塞之分
- 同步为了等待结果需要原地等待,为了实现这个等待,有两种方案
- 可以把线程挂起来也就是所谓的阻塞
- 死循环等待,因为死循环是属于程序运行中的,所以也就是所谓的非阻塞
BIO
同步阻塞,也就是把线程挂起来实现同步效果
NIO
同步非阻塞,也就是使用循环实现同步效果
多路复用
基于上面NIO的模型,为了实现同步效果而一直循环导致有下一个链接到来的时候无法处理新的链接就如同BIO一样,所以我们可以把socket放入内核,然后循环查询内核中哪个socket可以使用,当有新的链接进来的时候也可以直接丢进内存,然后重复看哪个socket有数据能处理就取出来处理
AIO
异步非阻塞,不关心数据是否立即返回,数据返回的时候内核会通知进行读取数据处理