虽然我已经使用pthreads、OpenMP、Intel TBB以及多线程技术玩了一段时间,但我仍然不明白像OpenMP这样的消息传递接口实现与经典线程库之间的主要区别是什么,对于我来说还不清楚。
假设在我的情况下编写所有线程池的样板代码不是问题,并且我正在使用C++,那么这两种技术之间的区别就归结为...?
我还对在线程网络化操作时将任务分配给所有连接机器感兴趣。
此时,我也不考虑OpenMP/OpenMPI所支持平台数量方面的限制,因为我想了解这两个概念的工作原理。
虽然我已经使用pthreads、OpenMP、Intel TBB以及多线程技术玩了一段时间,但我仍然不明白像OpenMP这样的消息传递接口实现与经典线程库之间的主要区别是什么,对于我来说还不清楚。
假设在我的情况下编写所有线程池的样板代码不是问题,并且我正在使用C++,那么这两种技术之间的区别就归结为...?
我还对在线程网络化操作时将任务分配给所有连接机器感兴趣。
此时,我也不考虑OpenMP/OpenMPI所支持平台数量方面的限制,因为我想了解这两个概念的工作原理。
"经典"的线程共享所有内存。这相当危险,因为很容易意外修改另一个线程可能正在使用的数据,导致严重的错误。程序员需要仔细保护数据以防止不安全访问。通常情况下,这还要求所有进程在同一台机器上运行,并具有对相同物理内存的访问权限。
使用具有消息传递接口的独立进程可以更好地控制哪些数据是共享的,哪些是每个进程私有的; 几乎没有一个进程会意外地修改另一个进程的状态的危险。正如你所说,消息传递接口可以被推广到在分别位于不同计算机上的进程之间传递消息。