fix typo #52 summited by @wangruifei

This commit is contained in:
Jerry Lee
2018-06-26 12:02:27 +08:00
parent 557181cdcc
commit ba9ab09dcb

View File

@@ -91,7 +91,7 @@ Result solve(Problem problem) {
![figure2-0](figure2-0.png)
`FJTask`框架是基于`Cilk`设计的一种演变。其他的类似框架有`Hood`<sup>[4]</sup>、`Filaments`<sup>[8]</sup>、`Stackthreads`<sup>[10]</sup>以及一些依赖于轻量级执行任务的相关系统。所有这些框架都采用和操作系统把线程映射到`CPU`上相同的方式来把任务映射到线程上。只是他们会使用`Fork/Join`程序的简单性、常规性以及一致性来执行这种映射。尽管这些框架都能适应不形式的并行程序,他们优化了`Fork/Join`的设计:
`FJTask`框架是基于`Cilk`设计的一种演变。其他的类似框架有`Hood`<sup>[4]</sup>、`Filaments`<sup>[8]</sup>、`Stackthreads`<sup>[10]</sup>以及一些依赖于轻量级执行任务的相关系统。所有这些框架都采用和操作系统把线程映射到`CPU`上相同的方式来把任务映射到线程上。只是他们会使用`Fork/Join`程序的简单性、常规性以及一致性来执行这种映射。尽管这些框架都能适应不形式的并行程序,他们优化了`Fork/Join`的设计:
- 一组工作者线程池是准备好的。每个工作线程都是标准的(『重量级』)处理存放在队列中任务的线程(这地方指的是`Thread`类的子类`FJTaskRunner`的实例对象)。通常情况下,工作线程应该与系统的处理器数量一致。对于一些原生的框架例如说`Cilk`,他们首先将映射成内核线程或者是轻量级的进程,然后再在处理器上面运行。在`Java`中,虚拟机和操作系统需要相互结合来完成线程到处理器的映射。然后对于计算密集型的运算来说,这种映射对于操作系统来说是一种相对简单的任务。任何合理的映射策略都会导致线程映射到不同的处理器。
- 所有的`Fork/Join`任务都是轻量级执行类的实例,而不是线程实例。在`Java`中,独立的可执行任务必须要实现`Runnable`接口并重写`run`方法。在`FJTask`框架中,这些任务将作为子类继承`FJTask`而不是`Thread`,它们都实现了`Runnable`接口。(对于上面两种情况来说,一个类也可以选择实现`Runnable`接口,类的实例对象既可以在任务中执行也可以在线程中执行。因为任务执行受到来自`FJTask`方法严厉规则的制约,子类化`FJTask`相对来说更加方便,也能够直接调用它们。)