Existem duas coisas diferentes, mas relacionadas aqui:
-
Se o seu programa executar um único thread, subprocesso de fibra ou qualquer outro mecanismo de sequenciamento de instruções, ele será single-threaded , independentemente de ser executado sempre da mesma forma núcleo (afinidade) ou circula através de diferentes núcleos. Se, pelo contrário, o seu programa executa vários threads, sub-processos de fibras, etc., então é multi-threaded , novamente, independentemente de fazê-lo no mesmo núcleo ou em diferentes.
-
Se o seu programa for multiencadeado, e somente nesse caso, ele poderá executar vários encadeamentos, fibras, subprocessos, etc. simultaneouosly . Neste caso, é chamado de programa paralelo .
Observe que um programa paralelo é sempre multi-threaded, mas você pode ter programas multi-threaded que não são paralelos.