From the Advanced Bash Programming Guide:
"In general, an external command in a script forks off a subprocess, whereas a Bash builtin does not. For this reason, builtins execute more quickly and use fewer system resources than their external command equivalents."
And a little further down:
"A command list embedded between parentheses runs as a subshell."
Examples:
[root@talara test]# echo $BASHPID
10792
[root@talara test]# (echo $BASHPID)
4087
[root@talara test]# (echo $BASHPID)
4088
[root@talara test]# (echo $BASHPID)
4089
Example using OPs code (with shorter sleeps because I believe that explains the rule as you requested.am impatient):
echo $BASHPID
sleep 2
(
echo $BASHPID
sleep 2
echo $BASHPID
)
The output:
[root@talara test]# bash sub_bash
6606
6608
6608