
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
1.5 可提升速度和可扩展性的分布式计算
为了最大限度地利用并行编程,我们需要在分布式环境中工作;也就是说,在这种环境中可以将工作负载分散到多台机器上。请考虑一下以下场景。
场景 假设一家金融交易公司想出了一种预测第二天股市行为的方法,这种方法是基于纽约市出租车和拼车服务的隔夜流量,再加上早上的鱼价进行计算的。该公司的模拟算法是完美的,但是每次需要运行5个小时才能得出结果。假设出行结果将在凌晨3点确定,而股票市场要到早上9点才开门。这就给这种预测方法预留了充足的时间,只是有些日子的鱼价要到早上6点才会出来。贸易公司怎样才能让它的模型及时运行?
在上面的场景中,如果交易员希望输入当天的实际鱼价数据,那么他们的运气就不好了。幸运的是,我们可以将这个问题分布在一个计算机网络上,并让它们各自计算一个单独的场景。这样,不管鱼价的数据是多少,交易员手头上都已经有结果了。
分布式计算是并行计算的一种扩展,在并行计算中,我们分配给指定任务的每个块的计算资源是它自己的机器。这很复杂。所有这些机器都必须与负责拆分任务及并合结果的机器进行通信。这样做的好处是我们可以同时执行许多复杂的任务(比如金融交易模拟),并将它们的结果合并在一起(如图1.8所示)。

图1.8 我们可以使用分布式计算来同时运行复杂的计算场景,并将结果返回到某一个位置。
重要的是,对于我们可以以分布式方式执行的问题,通常可以通过简单地将工作分配到越来越多的机器上,或者通过提高正在分布式执行任务的机器能力来加速执行。无论哪种解决方案,都将让代码执行得更快。不过,对于金融交易公司来说,好消息是他们可能有足够的资金来采用任何一种方案。