关于NIO

简介: 操作系统的IO控制 在整个IO控制方式的发展过程中,始终贯穿着这样一条宗旨:即尽量减少主机对IO控制的干预,把主机从繁杂的IO控制事务中解脱出来,以便更多地去完成数据处理任务。为了缓和高速CPU和IO设备低速间的矛盾,现代操作系统使用通道技术,SPOOLING技术,以及缓冲技术可以做到IO操作由特殊的IO处理器(通道)负责执行,只是在IO开始和结束时,调用CPU中断处理,从而使CPU资源

操作系统的IO控制

在整个IO控制方式的发展过程中,始终贯穿着这样一条宗旨:即尽量减少主机对IO控制的干预,把主机从繁杂的IO控制事务中解脱出来,以便更多地去完成数据处理任务。为了缓和高速CPU和IO设备低速间的矛盾,现代操作系统使用通道技术,SPOOLING技术,以及缓冲技术可以做到IO操作由特殊的IO处理器(通道)负责执行,只是在IO开始和结束时,调用CPU中断处理,从而使CPU资源不被IO占用,充分发挥了CPU使用效率。

所以下文要讨论的BIO和NIO,从操作系统对设备管理的角度来说,其CPU使用率都是相同的,因为相同操作系统对设备管理和IO控制是相同的。 只是NIO使用的线程少,所以占用的内存少,减轻了系统对上下文切换的开销。


参考:

什么是NIO

In computer science, asynchronous I/O, or non-blocking I/O is a form of  input/output processing that permits other  processing to continue before the transmission has finished.

Input and output (I/O) operations on a computer can be extremely slow compared to the processing of data. An I/O device can incorporate mechanical devices that must physically move, such as a hard drive seeking a track to read or write; this is often  orders of magnitude slower than the switching of electric current. For example, during a disk operation that takes ten milliseconds to perform, a processor that is clocked at one  gigahertz could have performed ten million instruction-processing cycles.

参考:

为什么要NIO


为每个客户端分配一个线程进行IO操作的弊端


这种IO模型已经在了几十年了,这种策略下,read和write调用都是堵塞的。它最大的问题就是每个线程都要占用一个完整的栈帧,假设栈帧的空间为2M,那么1G的内存最多服务512个线程,显然和10K有不小差距。当然,由于硬件资源越来越便宜,线程的内存开销可能不会成为瓶颈。但多线程带来的进程切换的开销却有可能长期存在。


每个客户端一个线程


用一个线程服务所有客户端,后端采用NIO,此技术类似于通信的多路复用(Multiplexing)  http://en.wikipedia.org/wiki/Multiplexing


所以NIO的主要优势是,其运用内核的IO线程,从而能够以较小的内存占用和较高的CPU使用效率支持大并发访问。此处需要注意的是并不是所有的操作系统就原生支持这种IO策略,例如*nix (Linux, Unix) 就不支持,所以其异步IO(AIO:Asynchronous IO) 其实是通过采用线程池与阻塞IO模拟异步IO,相反,在windows平台下的IOCP,它在某种程度上提供了理想的异步IO:调用异步方法,等待IO完成之后的通知,执行回调,用户无须考虑轮询。其背后原理依然是线程池,不同之处在于这些线程池由系统内核接受管理,所以占用内存小,上下文切换的代价也低。


异步IO带来的性能提升

就像前面关于NIO定义描述的,IO操作占据了程序运行中绝大部分时间,以数据访问所需要的开销为例(p48 NodeJS),访问CPU一级缓存需要3个CPU时钟周期,访问内存需要250个,访问硬盘需要41000000个,而访问网络则需要240000000个时钟周期。

所以异步IO能够带来明显的性能提升,例如一个业务需要执行如下操作

//消费时间为M
getData ('from db')

//消费时间为N
doOperate('from remote API')

如果是同步阻塞IO,其所需时间为M+N, 如果是异步IO,其所需时间为Max(M, N),可见其性能提升是很明显的。

异步IO带来的吞吐量提升

大家都知道建立TCP connection是比较耗时的,如果采用阻塞式的方式,势必会影响服务器的TPS,在我的下一遍关于BIO和NIO的性能分析中,有详细的测试报告,测试结果大概是BIO Accept一个TCP connection的时间大概是NIO的十倍。

我的观点

虽然最近Node和NIO很火,也不就意味着像Apache那种传统的Thread Per Request就到了世界末日了,至少eBay这么大流量的网站,并没有发现Apache Server是性能的瓶颈,瓶颈往往是在数据库上。特别是在Linux系统中,用线程池模拟异步IO,而系统内核又没有原生支持的情况下,我并没有发现其相比较于Apache有什么本质的提升, OK,Node的支持者,也许马上会反驳道,你刚刚不是说数据库是性能瓶颈吗,异步IO可以用异步的方式去访问数据库啊(上面的例子),可以将M+N的时间降低为Max(M,N),这不是性能提升么

事实果真是这样吗?不尽然,因为前后两次操作往往并不是独立的,而是有依赖关系的,也就是说doOperate必须等待getData的结果才能去做,在这种情况下,业务完成时间还是需要M+N。 不过对于网络服务器吞吐量提升和对于大并发的支持,这倒是不争的事实

NIO的缺点是编程过于复杂,如果处理不当,不但不能提高效率,反而会浪费系统资源,综合其优缺点,我个人觉得除非大并发真的变成系统瓶颈,否则最好谨慎使用NIO这把双刃剑


同步和异步IO,阻塞和非阻塞IO: http://www.360doc.com/content/12/0604/15/9579107_215831239.shtml

目录
打赏
0
0
0
0
186
分享
相关文章
从MVC到云原生:CBU研发体系演进之路
本文对过去十年 CBU 在研发方式和技术架构上的探索做一个简要的回顾总结,以及对未来的展望。
2236 43
从MVC到云原生:CBU研发体系演进之路
通俗易懂的告诉你容器是什么
1.Docker本身并不是容器,它是创建容器的工具,是应用容器引擎。 2.Docker包括:镜像(Image)、容器(Container)、仓库(Repository),后面会重点介绍。 3.K8S,全称kubernetes,是基于容器的集群管理平台,可以先简单理解为是管理容器的:可以实现容器集群的自动化部署、自动扩缩容、维护等功能。
1679 0
通俗易懂的告诉你容器是什么
解决方案应用实例 |“数智”合作,阿里云助力良渚古城建设智慧景区
在如今文旅融合大背景下,如何运用技术手段加强对文化遗产保护和利用已成为重要课题。阿里云所沉淀的云计算、数据驱动、人工智能等方面的先进技术,协助良渚古城遗址公园实现了数据资源的综合应用、深度应用和本地化应用,为游客提供全方位的便捷服务和体验,不断提高智能决策及精细化管理水平。良渚古城遗址公园与阿里云的“数智”合作,充分说明了只有运用云计算、大数据、互联网和物联网等技术,加快景区数字化进程,才能够更好地实现古代与当下的交相辉映。
4838 0
解决方案应用实例 |“数智”合作,阿里云助力良渚古城建设智慧景区
iOS右滑返回的实现(interactivePopGestureRecognizer)
iOS右滑返回的实现(interactivePopGestureRecognizer)
1224 0
iOS右滑返回的实现(interactivePopGestureRecognizer)
搜狗知音引擎再进一步,实现语音实时翻译
搜狗在乌镇互联网大会上发布了实时翻译技术,此后,搜狗语音交互中心技术负责人陈伟详细介绍了背后的技术框架和搜狗的多项核心技术。
642 0
搜狗知音引擎再进一步,实现语音实时翻译
一张彩票的上云之旅 ——中体彩的上云规划与组织协同
中国体育彩票2020年全年发行量达到1895 亿元,为国家筹集体彩公益金508亿元。这样一家始终倡导“公益体彩,乐善人生”公益理念的企业,如何完成其云转型之旅?
一张彩票的上云之旅 ——中体彩的上云规划与组织协同
昆仑平台验证加速技术浅谈
一般所讲的芯片平台是指前端研发人员进行设计和验证活动的开发平台,通常只针对一颗芯片或具有相同架构的一类芯片的研发活动而搭建,是狭义上的平台概念,其弊端也很明显,不能适应不同架构和快速迭代的研发需求。昆仑平台在这样的背景之下应运而生,其宗旨是迅速给出能够满足客户不同需求的解决方案,是一个广义平台概念。芯片验证作为前端芯片交付的出口,是把握芯片质量最重要的活动之一。验证周期在整个芯片开发周期的的占比正一步步加大,所以验证加速技术成为昆仑平台构建首先要考虑的重要课题。
昆仑平台验证加速技术浅谈
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等