1. BIO 的 one-connection-per-thread 模型在 C10K 问题下的资源瓶颈与伪异步 I/O 局限
BIO 的 one-connection-per-thread 模型在 C10K 问题下的资源瓶颈与伪异步 I/O 局限是什么?
- BIO 线程模型
- C10K 瓶颈
- 伪异步 I/O
BIO(Blocking I/O)的 one-connection-per-thread 模型:每个连接分配一个线程,线程阻塞在读写。C10K(1 万连接)问题下资源瓶颈:1)线程数随连接数线性增长,1 万连接需 1 万线程,线程创建/切换/栈内存(默认 1MB 栈)开销巨大,内存耗尽;2)大量线程阻塞等待,多数线程空闲,浪费资源;3)线程上下文切换开销大。伪异步 I/O(线程池 + 阻塞连接):用有界线程池替代每连接一线程,线程池复用线程,但仍是阻塞 I/O,线程池大小受限,连接多时线程池排队/拒绝,吞吐受限。伪异步的局限:线程池固定大小,阻塞连接占线程,连接数超过线程池时无法并发处理,本质仍是阻塞。
BIO 每连接一线程,C10K 下线程数爆炸浪费资源;伪异步用线程池复用但仍是阻塞,线程池有限连接多时受限。
// BIO:每连接一线程(C10K 下线程爆炸)
ExecutorService pool = Executors.newFixedThreadPool(100); // 伪异步:有界线程池
while (true) {
Socket s = server.accept();
pool.submit(() -> handle(s)); // 阻塞读写,线程池有限
}