Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.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
Node.js 节点模块中的并行流_Node.js_Asynchronous_Express_Node Async - Fatal编程技术网

Node.js 节点模块中的并行流

Node.js 节点模块中的并行流,node.js,asynchronous,express,node-async,Node.js,Asynchronous,Express,Node Async,我有一个快速应用程序。我想为我想要运行的一系列函数提供并行流。我正在考虑使用模块来实现这一点 我想知道是否还有其他模块比这个更好 其次,我想知道这些函数是否必须是异步的?假设我有这样的代码 var sum = function(x, y){ return (x + y) } async.parallel([ function(callback){ setTimeout(function(){ result = sum (x, y); //j

我有一个快速应用程序。我想为我想要运行的一系列函数提供并行流。我正在考虑使用模块来实现这一点

我想知道是否还有其他模块比这个更好

其次,我想知道这些函数是否必须是异步的?假设我有这样的代码

var sum = function(x, y){
   return (x + y)
}

async.parallel([
    function(callback){
        setTimeout(function(){
            result = sum (x, y); //just an example for a synchronous function
            callback(null, result);
        }, 100);
    },
    function(callback){
        result = sum (x, y); //just an example for a synchronous function
        callback(null, result);
    }

],
// optional callback
function(err, results){
    console.log(result);
    // the results array will equal ['one','two'] even though
    // the second function had a shorter timeout.
});
所以你可以在这里面找到一些同步的函数。那么,这两者还会并行运行吗

我还听说node.js中只有I/O任务可以并行运行,因为node.js是单线程的。这是真的吗?所以,若我并没有异步模块中的I/O任务,那个么它们也不会并行运行,而只是看起来是


请提供帮助。

异步是此类任务的实际模块,随它去吧

不,这些函数不一定是异步的。我相信你所有的问题都可以这样回答:,以下是重点:

js为您的代码保留一个线程,但是,一切都在运行 除了你的代码之外,其他都是并行的


async实际上是这类任务的模块,随它去吧

不,这些函数不一定是异步的。我相信你所有的问题都可以这样回答:,以下是重点:

js为您的代码保留一个线程,但是,一切都在运行 除了你的代码之外,其他都是并行的


Node.js是单线程和(开箱即用)单核

因此,Node.js中没有什么是真正的并行的,因为它是单线程的

只有当任务包含异步代码时,
async.parallel
方法才有用:它将等待所有响应,然后在回调中执行代码。 但是如果任务只包含同步代码,则结果将是同步的

因此,您最后一个问题的答案是

如果要尝试其他控制流模块,请尝试。它实现了Javascript承诺,使异步代码更易于阅读和组织

如果您想真正并行化您的任务,请查看或

还有一些特殊的本机模块,它们实现线程


代码的完整示例:

var async=require('async');
总和=函数(x,y){
返回(x+y)
}
x=2;
y=3;
异步并行([
函数(回调){
setTimeout(函数(){
结果=总和(x,y);
console.log('f1');
回调(null,result);
}, 100);
},
函数(回调){
结果=总和(x,y);
console.log('f2');
回调(null,result);
}
],
功能(错误、结果){
控制台日志(结果);
}
);
如果运行这段代码,输出结果将始终为:
f2、f1、5
。这是因为第一个函数中的
setTimeout
,但代码的执行方式是同步的

如果您想确信,请删除第一个函数中的setTimeout,并查看输出将始终
f1、f2、5

因此:

  • 如果要同时运行两个HTTP请求(异步),并等待两个请求都完成,则async.parallel非常有用

  • 如果将同步代码放入async.parallel中,则该代码将不起作用,因为代码将以同步方式执行


    • Node.js是单线程的和(开箱即用的)单核的

      因此,Node.js中没有什么是真正的并行的,因为它是单线程的

      只有当任务包含异步代码时,
      async.parallel
      方法才有用:它将等待所有响应,然后在回调中执行代码。 但是如果任务只包含同步代码,则结果将是同步的

      因此,您最后一个问题的答案是

      如果要尝试其他控制流模块,请尝试。它实现了Javascript承诺,使异步代码更易于阅读和组织

      如果您想真正并行化您的任务,请查看或

      还有一些特殊的本机模块,它们实现线程


      代码的完整示例:

      var async=require('async');
      总和=函数(x,y){
      返回(x+y)
      }
      x=2;
      y=3;
      异步并行([
      函数(回调){
      setTimeout(函数(){
      结果=总和(x,y);
      console.log('f1');
      回调(null,result);
      }, 100);
      },
      函数(回调){
      结果=总和(x,y);
      console.log('f2');
      回调(null,result);
      }
      ],
      功能(错误、结果){
      控制台日志(结果);
      }
      );
      
      如果运行这段代码,输出结果将始终为:
      f2、f1、5
      。这是因为第一个函数中的
      setTimeout
      ,但代码的执行方式是同步的

      如果您想确信,请删除第一个函数中的setTimeout,并查看输出将始终
      f1、f2、5

      因此:

      • 如果要同时运行两个HTTP请求(异步),并等待两个请求都完成,则async.parallel非常有用

      • 如果将同步代码放入async.parallel中,则该代码将不起作用,因为代码将以同步方式执行


        • 另一种方法是使用promise(蓝鸟)。 请参见此处的文档和示例用法)

          e、 g


          另一种方法是使用promise(蓝鸟)。 请参见此处的文档和示例用法)

          e、 g


          您确定它们不需要同步吗?第二,非I/O也会并行工作,或者像这样工作。正如许多人告诉我的那样,由于node.js是在单线程中运行的,所以不可能实现它,而要实现它,必须生成子进程。异步使用ch也是如此
          function f1() {... }
          function f2() {... }
          function f3() {... }
          
          Promise.all[f1(), f2(), f3()] // run all functions parallel
            .then(() => { /*do something*/})
            .catch(err => { /*handle error*/ })