nio

BIO

C10K问题arrow-up-right

BIO随着连接数的过大,C10K要抛出10K的线程

原理图

网络架构图

BIO代码实例

弊端

BIO 慢,为了解决这个问题。 要找到弊端:阻塞,accept阻塞,read阻塞。因为阻塞,抛出线程,每个线程互不影响,抛出多个线程。java中的线程是linux的子进程,上下文切换(用户态内核态切换)非常消耗性能。 阻塞是内核限制的,只有内核能解决。内核新增 NOBLOCKING

NIO

NIO代码实例

原理图

优点

NOI 解决了不停抛出许多线程的问题,可以在一个线程里面处理 accept 和 read。

弊端

一直不停的调accept 和 read。随着建立的连接越来越多,read 越来越多。read 调用了系统调用 recv,用户态内核态切换消耗性能。(read无罪,无效的无用的read别调起)

全量遍历,用户态内核态不停切换

最后更新于