为什么我觉得 nio 比 aio 更适合高并发

nio 是同步非阻塞的,aio 是异步非阻塞的,初看,肯定是异步的更好更高级啊,那为什么我觉得 nio 比 aio 更适合高并发呢?嗯,一定是哪儿出了问题。

这个要涉及到它们两个的具体实现和使用了。

首先,我们想象 bio 高并发的最主要限制条件是什么?阻塞。对,阻塞是对资源极大的浪费,但 nio 和 aio 两个都是非阻塞的,这个问题不是决定原因。

那么,第二限制条件呢?线程。对,就是线程,想想如果同时有一万个并发量,我们要建立一万个线程,唉,估计要把操作系统累死了,线程切换调度消耗极大。

那怎么解决呢?如果我们只用少量线程能不能实现呢?答案是可以的,我们利用 nio 同步非阻塞的特性,把各种请求当成一个个时间,然后用几个固定的线程去依次执行这行事件,形成一个或多个事件循环,这样我们可以同时处理高达上万的并发,当然,事件循环一个不能有阻塞调用,否则,一旦阻塞了事件循环,这个事件循环里的所有事件都执行不了了。netty 高并发的原理就是这样的。

而 aio 呢?aio 的回调是要开线程的,它只是解决了阻塞浪费资源的问题,并没有解决高并发时线程调度的开销。

猜你喜欢

转载自blog.csdn.net/buyulian/article/details/84678673
今日推荐