闲扯NIO

Q&A

  1. 为什么异步能提高性能?
    一言以蔽之,异步化能提高线程利用率。这意味着,相比于TPC(Thread-Per-Connection),达到相同的CPU利用率,所需要的线程更少,所以,线程切换的更少,资源占用量(主要是内存资源)更少。

下面证明之:
首先证明,假设我们的应用的I/O和非I/o之比为4:1,也就是I/O占80%,计算只占20%,如果采用
TPC的模型,可以如果证明,如果一个线程管理一个I/O,那么整体线程使用率不可能超过20%。除非可以一个线程管理多个I/O。 即epoll,epoll,之所以高效是由于,他可以同时管理多个I/O.并且
任意一个I/O可用,它就不阻塞。(试想,如果它只能等待一个I/O返回,才能调用下一个,那么其实)理论上它只需要等待4s/N。(N为注册在epoll上的描述符数量)。(实际上由于Round-Trip的硬性限制。以及随着N的增加,带来的遍历,派发等成本,不可接近于0),

NIO必须提供一种能力,当有可读可写事件时,将对应的Handler调度执行。也就是实现了做I/O的,以及依赖于I/O结果的Handler可能并不在同一个线程中。

2.为什么需要多个I/O线程。
随着epoll上注册事件的这多。我们达到“供不用求”的状态,主要是对于迭代Selectionkey的分发上,所以需要多个I/O去做分发,而对于耗时操作。最好另起一个线程,而不是放在I/O线程中。如果不耗时,那么可以在I/O线程中完成,这样可以减少上下文切换提高效率。

参考资料:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值