Często czytam, że równoległość i współbieżność to różne rzeczy. Bardzo często osoby odpowiadające / komentujące sięgają tak daleko, że piszą, że są to dwie zupełnie różne rzeczy. Jednak moim zdaniem są one powiązane, ale chciałbym coś wyjaśnić.
Na przykład, jeśli korzystam z procesora wielordzeniowego i uda mi się podzielić obliczenia na x mniejsze obliczenia (powiedzmy za pomocą rozwidlenia / łączenia), każdy działający w swoim własnym wątku, będę mieć program, który wykonuje równoległe obliczenia (ponieważ przypuszczalnie w dowolnym momencie kilka wątków będzie działać na kilku rdzeniach) i jest to jednocześnie prawda?
Chociaż jeśli po prostu używam, powiedzmy, Java i zajmuję się zdarzeniami interfejsu użytkownika i odświeżeniami w wątku wysyłania zdarzeń oraz uruchamiam jedyny wątek, który sam stworzyłem, będę mieć program, który będzie współbieżny (wątek EDT + GC + mój główny wątek itp.), ale nie równolegle.
Chciałbym wiedzieć, czy mam rację i czy równoległość (w systemie „pojedynczym, ale wielordzeniowym”) zawsze oznacza współbieżność, czy nie?
Ponadto, czy programy wielowątkowe działają na procesorze wielordzeniowym, ale gdzie różne wątki wykonują zupełnie inne obliczenia, uważa się je za „równoległe”?