Q:

Are these gulp statements run in parallel or in series within Node?

I'm trying to understand how Node decides what to run asynchronously (in parallel) and what to run synchronously (in series).
Coming from a synchronous JavaScript background I would expect the first statement below to run first, then only after it completes would node attempt to run the second statement.
Am I right in assuming this please?
// first statement
gulp.src('src/test-1.txt')
    .pipe(gulp.dest('dest/'));

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

A:

Yes and No.
The first statement is always executed and completed before the second statement started. This always holds true just like most of the programming languages.
However the goal/task (copy 'src/test-1.txt' to 'dest/') of the first statement does not necessary complete before the goal/task of the second statement (copy 'src/test-2.txt' to 'dest/').
It is possible test-1.txt get copied first, then test-2.txt, or vice versa. It depends on the runtime, the OS, the filesystem, the file size etc.
Also asynchronously have nothing to do with parallelism.
Execute code asynchronously means you enqueue tasks to a queue and yo don't wait until it finish before the statement complete (e.g. setTimeout). The tasks may be executed in serial or concurrently (mostly likely in serial for JS).
Whereas execute synchronously simply means you wait until the task finish before complete the statement.
Parallelism means you execute tasks concurrently (i.e. with threads).

