您好,欢迎来到二三娱乐。
搜索
您的当前位置:首页小插曲——NIO的前世今生

小插曲——NIO的前世今生

来源:二三娱乐

发展:

BIO -> NIO -> AIO

BIO就是我们传统意义上的IO,它的特点是阻塞的。例如以前我们进行网络编程时,一个客户端使用一个线程来进行处理。这样会导致一个问题:服务器的线程数是有限制的,而不是每个客户端时时都有数据进行传输的。所以大量空的线程占了位置,但是又不工作,导致服务器的性能受限。

这会涉及到4次上下文切换和4次拷贝。

第一次切换:从用户态切换到内核态,将数据读取到内核

第二次切换:从内核态切换到用户态,读取返回

第三次切换:从用户态切换到内核态,将数据拷贝到内核

第四次切换:从内核态切换到用户态,写完返回

四次拷贝:

1.通过DMA将数据从硬件拷贝到内核

2.通过CPU将数据从内核拷贝到用户缓冲

3.通过CPU将数据从用户缓冲拷贝到内核

4.从内核写入到硬件

NIO:一个请求对应一个线程,解决BIO高并发的问题。

会涉及到3次拷贝,2次切换:

第一次拷贝:从硬件到内核空间

第二次拷贝:从内核空间到socket buffer

第三次拷贝:从socket buffer到protocol engine

第一次切换:从用户态切换到内核态,数据通过DMA将数据拷贝到内核

第二次切换:数据写完到硬件后返回,从内核态切换到用户态

BIO和NIO对比:

BIO基于流,而NIO基于 Buffer. BIO 只能按照顺序读,而NIO可以随意读。

Copyright © 2019- yule263.com 版权所有 湘ICP备2023023988号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务