Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.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 这些gulp语句在节点中是并行运行还是串行运行?_Javascript_Node.js_Asynchronous_Gulp - Fatal编程技术网

Javascript 这些gulp语句在节点中是并行运行还是串行运行?

Javascript 这些gulp语句在节点中是并行运行还是串行运行?,javascript,node.js,asynchronous,gulp,Javascript,Node.js,Asynchronous,Gulp,我试图理解Node如何决定异步(并行)运行什么和同步(串行)运行什么 来自同步JavaScript背景,我希望下面的第一条语句首先运行,然后只有在它完成后节点才会尝试运行第二条语句 请问我的假设对吗 // first statement gulp.src('src/test-1.txt') .pipe(gulp.dest('dest/')); // second statement gulp.src('src/test-2.txt') .pipe(gulp.dest('dest

我试图理解Node如何决定异步(并行)运行什么和同步(串行)运行什么

来自同步JavaScript背景,我希望下面的第一条语句首先运行,然后只有在它完成后节点才会尝试运行第二条语句

请问我的假设对吗

// first statement
gulp.src('src/test-1.txt')
    .pipe(gulp.dest('dest/'));

// second statement
gulp.src('src/test-2.txt')
    .pipe(gulp.dest('dest/'));
是和否

第一条语句总是在第二条语句开始之前执行和完成。就像大多数编程语言一样,这总是正确的

但是,第一条语句的目标/任务(将“src/test-1.txt”复制到“dest/”)不必在第二条语句的目标/任务(将“src/test-2.txt”复制到“dest/”)之前完成

可以先复制test-1.txt,然后再复制test-2.txt,反之亦然。它取决于运行时、操作系统、文件系统、文件大小等

同样,异步与并行性无关。 异步执行代码意味着您将任务排入队列,并且在语句完成之前不必等待它完成(例如,
setTimeout
)。任务可以串行执行,也可以并发执行(对于JS,最有可能是串行执行)

然而,同步执行只是意味着要等到任务完成后才能完成语句


并行意味着并行执行任务(即使用线程)。

Async并不意味着并行(多线程/进程同时运行)。这只是意味着执行是异步的。用于复制的流将处理的数据分成小块,因此在您的示例中,复制可能是交错的。我明白了。因此,代码一行接一行地执行(如预期的那样),但每次执行的结果可能在不同的时间返回。因此,如果我想确保第二条语句只在第一条语句完全完成后运行,我需要实现某种形式的回调/系列运行程序。是的。但在实现您自己的串行运行程序之前,请先签出现有的库。是的,我已经看到一个或两个库可以在这方面提供帮助。我有一个后续查询,但不确定是否应该使用此注释来询问它,但以防万一:假设我有一个函数读取两个文本文件并返回两个包含在一起的文件。返回的结果是否可能在从文件系统读取其中一个文件之前执行,这意味着结果将只包含一个文件而不是两个文件,或者Node是否足够聪明,知道函数中的所有语句都应该在返回结果之前完成?这完全取决于它的实现方式和您使用的API。您可以将任务读取文件1排入队列,将任务读取文件2排入队列,等待两者,将任务串联文件排入队列。或者让任务读取文件1排队,让任务读取文件2排队,让前两个任务的任务排队,然后连接文件。在后一种情况下,在读取文件之前执行最后一条语句。如果你需要更多的澄清,请随时发布一个新的问题和更多的细节。谢谢布赖恩。是的,我将发布一个新问题以进一步澄清。