Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么NodeJs即使在异步运行时也不能处理CPU密集型任务?_Javascript_Node.js_Performance_Single Threaded - Fatal编程技术网

Javascript 为什么NodeJs即使在异步运行时也不能处理CPU密集型任务?

Javascript 为什么NodeJs即使在异步运行时也不能处理CPU密集型任务?,javascript,node.js,performance,single-threaded,Javascript,Node.js,Performance,Single Threaded,我不明白的是,nodejs是异步的,所以我运行多个任务,不管它们花费多长时间,因为代码解析器会继续执行其他任务,当长任务完成时,它会通过回调函数通知我,那么CPU密集型任务的阻塞在哪里?即使一个任务需要10秒钟,Js中的其他代码行也会继续执行并启动其他任务。由于nodej只使用4个线程来完成繁重的任务,我知道所有这些线程都会很忙,所以下面是为什么不使用nodej的繁重cpu任务的场景,对吗 var listener = readAsync("I/O heavy calculation", fun

我不明白的是,nodejs是异步的,所以我运行多个任务,不管它们花费多长时间,因为代码解析器会继续执行其他任务,当长任务完成时,它会通过回调函数通知我,那么CPU密集型任务的阻塞在哪里?即使一个任务需要10秒钟,Js中的其他代码行也会继续执行并启动其他任务。由于nodej只使用4个线程来完成繁重的任务,我知道所有这些线程都会很忙,所以下面是为什么不使用nodej的繁重cpu任务的场景,对吗

var listener = readAsync("I/O heavy calculation", function(){
   console.log("I run after the I/O is done."); 
 })

//The parse will send the request and pass to the next line of code

console.log("I run before I/O request is done")

我希望全局声明的console.log在回调函数之前运行。

Nodejs程序设计为单线程。它优先考虑事件循环中最重要的应用。有很多方法可以大规模优化您的绩效。例如,在node js中内置了一个集群模块,用于将相同的节点客户端分配给不同的工作者


节点10.5提供了多线程支持,但这是实验性的

我不明白你在问什么。请用更详细的信息和一个具体的例子重新表述您的问题。在nodeJs中,I/O阻塞线程的强度有多大?为什么?请添加
readAsync
的定义。根据它的实现方式,它可能会阻止线程。readAsync是一个函数,它运行函数readAsync(param1,callback)的第一个参数,如setTimeout(),在param1的cpu处理期间,js的解析器会继续读取代码,而不会弯腰等待完成param1的响应。