“多线程比网络更容易.线程如何简单,类似于网络代码”
http://software.intel.com/file/14723
(这给我的印象是它们非常相似,在封装后这两种方法可以使用相同的代码完成 – 但也许我错了)
“关于分布式计算的说明”
http://research.sun.com/techrep/1994/abstract-29.html
(这有很大的区别)
我确信事实介于两者之间.什么是中庸之道?有没有技术可以统一这两种范式?或者由于网络和并发之间的根本区别,这些尝试失败了吗?
解决方法
每个节点通常都会运行一些处理,并且需要某种类型的跨节点通信.通常,此通信的第一个实例是告诉节点要做什么.对于这种通信,我可以使用共享内存,信号量,共享文件,命名管道,套接字,远程过程调用,分布式COM等.但最简单的使用,共享内存和信号量通常不能通过网络使用.共享文件可能可用,但性能通常很差.套接字往往是网络上最常见,最灵活的选择,而不是更复杂的机制.此时,您必须处理网络体系结构的详细信息,包括延迟,带宽,数据包丢失,网络拓扑等.
如果从一个工作队列开始,同一台机器上的节点可以使用简单的共享内存来完成工作.你甚至可以把它写成无锁,它可以无缝地工作.通过网络上的节点,您在哪里放置队列?如果集中它,该机器可能会承受非常高的带宽成本.尝试分发它,事情变得非常复杂很快.
总的来说,我发现处理这种并行体系结构的人倾向于选择令人尴尬的并行问题来解决.想到了光线追踪.除了工作分配之外,不需要太多的跨节点通信.可以肯定的是,有很多这样的问题,但我发现分布式计算与线程化基本相同有点不诚实.
现在,如果您要编写与分布式系统相同的写入线程,使用纯消息传递并且不假设任何线程是“主要”等等,那么是的,它们将非常相似.但是你所做的就是假装你有一个分布式架构并在线程中实现它.问题在于线程化是一种比真正的分布式计算更简单的并行性案例.您可以将这两个问题抽象为一个问题,但是选择更难的版本并严格遵守它.当所有节点都是机器的本地节点时,结果将不会像它们那样好.你没有利用这个特例.