宝哥软件园

支持Java NIO和NodeJS的底层技术

编辑:宝哥软件园 来源:互联网 时间:2021-09-07

支持Java NIO和NodeJS的底层技术

众所周知,在最近的Java版本中,增加了对Java NIO和NIO2的一些支持。同时,NodeJS技术栈最著名的优势之一就是它的高性能IO,所以我们今天要讨论的话题就是支持这些技术的底层技术。

开始之前要问的一个问题是:

为什么NodeJS和Java NIO2没有更早出现?

回答:个人认为底层配套技术不成熟。

那么,底层技术意味着什么?没错,我想很多人已经猜到是操作系统技术。本文提出的两个概念Java NIO2和NodeJS,无一例外都是用户模式技术或应用层技术,这些应用层技术都运行在OS上。同时,随着操作系统的发展,支持的编程模型也更加丰富。可以说,这两项技术完全是为了应用操作系统进步带来的红利而进化而来的。一般来说,第一个享受这个加成的技术肯定是CC,因为最新开发的OS提供了大部分的系统调用,而CC是应用这些系统调用最方便最复杂的。为了获得同样的性能,其他平台必须不断进化和打包,这样用户才能利用这些红利。一旦那个平台停滞不前,更新换代,这个平台就该没落了。用户打包越方便,对用户越友好,可能用的人就越多。虽然很多人可以基于这些平台快速编写代码,但往往无法理解其本质,因为他们仍然没有从本质上理解这些技术的动机和原理。我们下面讨论的技术是与这两种技术相关的底层技术。

无论是哪种操作系统设计,以下五种IO模式必不可少。

1.阻塞输入/输出氧气。非阻塞I/O3。输入/输出多路复用(选择、轮询和epoll)4。信号驱动输入输出(SIGIO)5。异步输入输出

1.阻塞输入输出

如图所示,这种IO模式的优点是编程简单,也是OS支持最早的IO模式之一。缺点是系统调用会阻塞用户的动态线程执行,造成CPU时间浪费,IO效率低。

2.非阻塞输入输出

如图所示,这种IO模型的一个改进是IO是无阻塞的,但是需要很长的轮询,这也浪费了CPU的时钟周期。

3.输入/输出多路复用(选择、轮询和轮询)

如图所示,这个IO模型是当今OS提供的最稳定的IO模型,大多数主流应用都是基于这个IO模型构建的,比如NodeJS,但是这些平台往往会在这个模型上增加一层封装,直接支持AIO。

4.信号驱动输入输出

如图所示,记录了这种IO模型很少被设计人员使用,因为它与Model 3相比没有性能优势,系统支持也不稳定。

5.异步输入输出

如图,这个IO模型是最完美的AIO,编程模型也是最简单的,但是能完美支持这个模型的OSS很少。网上数据显示,Linux正在这方面做出努力。一旦OS在这方面取得进展,编程框架、平台、编程模型可能还需要很大程度的简化。

虽然这种模式很少得到OS的支持,但并不意味着现在没有这样的AIO模式。很多框架都做过这方面的工作,在用户模式下模拟AIO,让用户可以更加关注业务逻辑代码。

6.同步异步、阻塞和非阻塞

同步和异步是针对应用程序和内核之间的交互。当数据被读取时,它返回同步,并直接返回异步。阻塞和非阻塞是针对进程和线程的。在阻塞模式下,读或写线程一直等待,而在非阻塞模式下,读或写线程会立即返回一个状态值。

以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。

更多资讯
游戏推荐
更多+