A subshell is a process:
( and ) are control operators that executes command in a subshell.
(command1;command2) will execute without capturing the standard stream.
Example with the capture notation:
foo() {
>&2 echo "std error";
echo "std out";
}
echo $(foo)
std error
std out
Each part of pipeline will create a subshell.
With the ampersand, you can create a subshell that runs in the background.