diff --git a/source/chapter8/0intro.rst b/source/chapter8/0intro.rst index 41b85cc9..bb99b040 100644 --- a/source/chapter8/0intro.rst +++ b/source/chapter8/0intro.rst @@ -57,7 +57,11 @@ 可回顾一下 :ref:`并行与并发的解释 ` 。在单处理器情况下,多个进程或线程是并发执行的。 -有了进程以后,为什么还会出现线程(Thread)呢?考虑如下情况,对于很多应用(以单一进程的形式运行)而言,逻辑上存在多个可并行执行的任务,如果其中一个任务被阻塞,将会引起不依赖该任务的其他任务也被阻塞。举个具体的例子,我们平常用编辑器来编辑文本内容的时候,都会有一个定时自动保存的功能,这个功能的作用是在系统或应用本身出现故障的情况前,已有的文档内容会被提前保存。假设编辑器自动保存时由于磁盘性能导致写入较慢,导致整个进程被阻塞,这就会影响到用户编辑文档的人机交互体验:即软件的及时响应能力不足,用户只有等到磁盘写入完成后,操作系统重新调度该进程运行后,用户才可编辑。如果我们把一个进程内的多个可并行执行任务通过一种更细粒度的方式让操作系统进行调度,那么就可以通过处理器时间片切换实现这种细粒度的并发执行。这种细粒度的调度对象就是线程。 +有了进程以后,为什么还会出现线程(Thread)呢?提高整个系统的并行/并发执行效率是主要的原因。考虑如下情况,对于很多应用(以单一进程的形式运行)而言,逻辑上由多个可并行执行的任务组成,如果其中一个任务被阻塞,将会引起不依赖该任务的其他任务也被阻塞。 + +举个具体的例子,我们平常用编辑器来编辑文本内容的时候,都会有一个定时自动保存的功能,即把当前文档内容保存到磁盘上。假设磁盘性能导致编辑器自动保存的过程较慢,并影响到整个进程被阻塞,这就会影响到用户编辑文档的人机交互体验:即用户只有等到磁盘写入操作完成后,操作系统重新调度该进程运行,用户才可继续编辑文档。 + +如果我们把一个进程内的多个可并行执行的任务通过一种更细粒度的方式让操作系统进行调度,那么就可以在进程内实现并发执行。在上面的例子中,负责保存文档内容的任务与负责编辑文档的任务可以并发执行,不会出现一个被阻塞的任务导致其它任务都阻塞的情况。这种任务就是一种更细粒度的调度对象,也就是我们这里说的线程。 .. _term-thread-define: