BIO NIO AIO
BIO - blocking IO
传统IO模型,同步阻塞,所有的accept read write 都会阻塞,不管是客户端还是服务器端。
普通的socket编程就是这种。当服务器端accept时阻塞,当read时也会阻塞。
通过使用多线程可以实现对多个客户端的链接,即主线程中accept,当有新的连接建立后,使用线程处理read/write.
NIO - Non-blocking IO
采用channel或者buffer 与 selector的方式,实现同步非阻塞。
步调(同步、异步)和阻塞(阻塞、非阻塞)
阻塞 | 非阻塞 | |
---|---|---|
同步 | 执行任务,并等待返回结果 | 执行任务,轮询返回结果 |
异步 | 延迟执行任务,一旦开始任务就一直等待返回结果 | 执行任务,并结果准备好后,通过回调方式处理结果 |
同步阻塞
什么叫同步非阻塞:使用编程的方式去描述就是:
- 把try放在while 循环中,直到try成功。
比如采用channel或者buffer的方式实现同步非阻塞,可能就是
不停地去检查channel或者buffer中是否已经有数据。
- 如果没有不停的检索,
- 如果有了则继续后续的工作。
异步阻塞
"在需要某资源时不马上发起请求,而安排一个以后的时间再发起请求。当到了那时发出请求时,将暂停本线程之后的程序,直至获得所需的资源。在获取资源之后,使用共享信号量、异步回调等方式将结果异步反馈。"
https://blog.csdn.net/wangpaiblog/article/details/117236684
IoC
IoC: Inversion of Control 依赖倒置,也称为控制反转
在很多系统设计中常被用到,用来实现模块与模块,完成实现对象和设计框架之间的解耦。
IoC也让函数回调或者插入函数变的容易。