Los subprocesos y la bifurcación son en realidad dos conceptos diferentes, los cuales existen en los sistemas Unix / Linux (y ambos se pueden usar en C / C ++).
La idea de un fork () es (muy básicamente) una creación de un proceso separado que tiene el mismo código de ejecución que el proceso padre, y que comienza la ejecución en la línea fork. El propósito de usar horquillas con funciones ejecutivas es que las funciones ejecutivas cierran el proceso que las llamó cuando finalizan. Por lo tanto, generalmente se bifurca, obtiene el PID de cada proceso (el niño siempre es 0) y hace que el padre espere hasta que el niño termine de ejecutar la función exec.
Los hilos se usan para el paralelismo (recuerde que el padre espera al hijo, generalmente, en un programa bifurcado). Un hilo, como pthread en C / C ++ (hacer una búsqueda en Google), se ejecutará en paralelo al proceso principal y puede compartir variables globales y funciones globales con el programa original. Dado que los hilos de Java se comportan de manera similar, me imagino que actúan más como estos hilos que como un proceso de bifurcación.
Básicamente, hay una diferencia entre bifurcación y roscado. Hacen cosas claramente diferentes (aunque parezcan similares). Estos conceptos pueden ser difíciles de entender, pero puede aprenderlos a través de una investigación (extensa) si tiene un sincero deseo de comprenderlos.
EDITAR # 1
Vea estos ejemplos de cómo se pueden llamar y utilizar los tenedores y los hilos. Tenga en cuenta el comportamiento de las funciones ejecutivas y sus efectos en el programa principal.
http://www.jdembrun.com:4352/computerScience/forkVSthread.zip