多线程-并行编程==多线程编程吗?

是并行编程==多线程编程吗?

3个解决方案
31 votes

多线程编程是并行的,但是并行编程不一定是多线程的。

除非多线程发生在单个内核上,否则在这种情况下只能是并发的。

Lucas Lindström answered 2020-07-17T19:35:40Z
28 votes

不必要。 您可以在多个进程甚至多个机器之间分配作业-我不会将其归类为“多线程”编程,因为每个进程可能只使用一个线程,但是肯定是并行编程。 诚然,您可能会争辩说,使用多个进程,整个系统内有多个线程...

最终,这样的定义仅在上下文中有用。 在您的特定情况下,会有什么不同? 还是只是出于兴趣?

Jon Skeet answered 2020-07-17T19:36:05Z
26 votes

否。多线程编程意味着您只有一个进程,并且该进程会生成一堆线程。 所有线程都在同一时间运行,但是它们都在同一进程空间下:它们可以访问相同的内存,具有相同的打开文件描述符,等等。

并行编程的定义更加“笼统”。 在MPI中,您可以通过多次运行同一进程来执行并行编程,不同之处在于每个进程都会获得一个不同的“标识符”,因此,如果需要,您可以区分每个进程,但这不是必需的。 同样,这些进程彼此独立,它们必须通过管道或网络/ unix套接字进行通信。 MPI库提供特定功能,以同步或异步方式在节点之间来回移动数据。

相反,OpenMP通过多线程和共享内存实现并行化。 您为编译器指定特殊指令,它会自动为您执行并行执行。

OpenMP的优点是它非常透明。 有循环并行化吗? 只需添加几个指令,然后编译器将其分块,然后将循环的每个部分分配给不同的处理器。 不幸的是,您需要一个共享内存体系结构。 具有基于节点的体系结构的群集无法在群集级别使用OpenMP。 MPI允许您在基于节点的体系结构上工作,但是您必须付出更复杂且不透明的用法的代价。

Stefano Borini answered 2020-07-17T19:36:40Z
translate from https://stackoverflow.com:/questions/2287695/is-parallel-programming-multithread-programming