泛函编程(19)-泛函库设计-Parallelism In Action

  • 时间:
  • 浏览:0

三个白 以上并行运算都能够通过map2来实现:

2、async[A](a: => A): Par[A]:这人async函数把表达式a提交到主进程之外的这样 进程。新的进程由ExecutorService提供,朋友不必理会,这样 都能够实现进程管理和并行运算组件库的松散耦合。原因分析分析async的传人函数是延后计算类型,所以朋友都能够把表达式a提交给这样 进程去运算。

在map2的实现里朋友人为地建了个Future[C]。但在建的过程中朋友运行了pa,pb的计算。原因分析分析朋友对pa或pb有运算超不到求得话,就不到计算每次运算所使用的时间。所以Future[C]是符合pa,pb的运算要求的。

1、unit[A](a: A): Par[A] : 朋友硬生生的按照Par的类型款式造了三个白 Future实例,这样 朋友才都能够用Future.get的形式读取运算结果值。看看这人例子:unit(42+1),在调用函数unit时原因分析分析传入参数是即时计算的,所以在进入unit前原因分析分析完成了计算结果43。但会 人为的把这人结果赋予Future.get,这样 朋友就都能够和真正的由ExecutorService返回的Future一样用同样的土法律法律依据读取结果。所以说unit纯粹是三个白 改变格式的升格函数,这样任何其它作用。

现在所有的计算都是在不同的非主进程中运算的了,清楚了吧。

实现异步运算才是并行运算的第一步。并行运算顾名思义就是把三个白 大任务分解成2个较小任务但会 同時 异步运算后再把结果结合起来。朋友用伪代码描述一下并行运算思路:

看来用以上土法律法律依据是都能够得到并行运算的效果(10秒到5秒区别)。但朋友采用了串指令(imperative)土法律法律依据实现。当然朋友不到考虑用泛函土法律法律依据来实现并行运算的启动及结果抽取。

实际上朋友原因分析分析实现了两项最基本的函数:

朋友先试着同時 运算41+2,33+4三个白 计算:

看看结果:unit在主进程main运行,而async则在pool-1-thread-1这人非主进程内运行。

先用泛函土法律法律依据启动并行运算。原因分析分析朋友并行启动三个白 运算:

    上节朋友讨论了并行运算组件库的基础设计,实现了并行运算最基本的功能:创建新的进程并提交三个白 任务异步执行。并行运算类型的基本表达形式如下:

这样朋友用例子来示范一下: