为什么无阻塞节点会减少I / O总时间?

时间:2018-09-13 07:54:01

标签: javascript node.js

有一个节点教程指出:

  

节点是一个无阻塞的I / O系统。如果有一个任务消耗时间m,另一个任务消耗时间n(m'<'n)。则在阻塞I / O系统中,总消耗时间为'm + n',但在节点中为n

但是,由于javascript是单线程语言。我认为即使在任务的所谓事件循环中也不会减少时间,对吧?

全部是因为节点正在使用C / C ++多线程来完成此任务。


好的。我的主要困惑是我将I / O消耗时间弄乱了,包括在javascript计算中。

2 个答案:

答案 0 :(得分:1)

节点,基本上不会在减少执行单个任务的时间方面起主要作用,但它类似于并行处理。这意味着它不会等待其他任务完成,并且可以一次执行多个任务。正如您所知道的,这个概念是关于多个线程同时执行以利用最大的cpu和内存(以毫秒为单位的时间),因此我们会感觉到所有线程都是同时执行的

答案 1 :(得分:1)

是的。 Javascript是单线程的,但具有非阻塞IO实现。上面的行表示这样的事情,您认为必须从服务器获取HTTP响应,该服务器是使用计算机网络接口的IO,因此,当HTTP响应到来时,线程是免费的(在CPU上不进行任何计算,通过表示您的CPU线程是空闲的),因此它可以继续执行其他任务,例如呈现您的页面。

挂起Javascript线程的唯一方法是更高的执行率。认为您正在进行某种大规模的计算。在这种情况下,您的进程被阻止了。但这不是IO(输入或输出)。

因此,您在IO非阻塞和CPU线程阻塞之间感到困惑