Ono se nedá jednoznačně říct, že by jedna z variant (procesy nebo thready) byla ideální a druhá "strašná". Záleží na situaci, v případě, že jednotlivé instance potřebují intenzivně sdílet data, jsou výhodnější thready, pokud mají být relativně izolované, budou vhodnější procesy. Thready mají výhodu v nižší režii (vytvoření i přepínání), výhodou procesů je jednodušší psaní aplikací - nemusíte tolik dávat pozor na každou globální proměnnou. Bylo by nesmyslem tvrdit, že jedna z možností je Jediná Správná Cesta (TM) a druhá je nesmyslem. Buďme rádi, že si můžeme vybrat.
Především je obludně neefektivní při spouštění jiného programu. Nejprve se musí okopírovat všechna sdílená data, aby se v zápětí zahodila (když synovský proces změní program). Ale tuším, že novější systémy se to kopírování snaží ochcát přístupem copy-on-write. Ale to možná kecá. Fork prostě nemám rád, už mám něco odprogramováno a ještě jsem ho nepotřeboval.
Chci te videt jak s pomoci vlakna pustis jiny program ... tady jde o filozofii. Windows pouzivaji spawn (i kdyz tomu rikaji ShellExec), linux fork+exec. Fakt, ze po fork nemusis provest exec, je jen sideefect a lze to naemulovat exec(argv[0]) a predanim globalnich promennych ... obvykle kdyz bys toho predaval hodne, uz je to spis uloha na vlakna.