知识点讲解:进程和线程

发布时间:2021-12-28 10:07:12

  进程(process)和线程(thread)是操作系统的基本概念,但它们相对抽象,不易掌握。笔者为大家整理了关于进程与线索的知识点讲解,希望能帮助同学们掌握重难点。

知识点解法:进程与线程。

  许多学生都听过,像MacOSX,UNIX,Linux,Windows,等等,现代的操作系统,都是支持多任务的操作系统。什麽是「多重任务」?简而言之,操作系统能够一次运行多个任务。比方说,你一边用浏览器上网,一边听MP3,一边用Word完成作业,这就是一项多任务,至少一次工作三项。在后台也有大量的任务同时运行,只是没有在桌面上进行显示。

  目前,多核CPU已很流行,但即使是过去的单核CPU,也能执行多任务。因为CPU执行代码全部是连续的,那么一个单核CPU如何执行多任务?回答是操作系统轮流让单个任务交替执行,Task1执行0.01秒,Task2执行0.01秒,Task2执行0.01秒,再切换到Task3,执行0.01秒……如此反复执行。看上去,每项任务都是交替执行的,然而,因为CPU执行起来确实太快了,感觉好像所有任务都在同时执行。

  实际并行执行多任务仅适用于多核CPU,然而,由于任务的数量远远超过CPU的核心数,操作系统还自动将许多任务轮流调度到每一个内核上执行。对操作系统而言,一项任务是处理(Process),例如,打开浏览器意味着启动一个浏览器,当打开记事本时,将启动记事本进程,而打开两个记事本,将启动两个记事本进程,开启Word,即可启动Word进程。

  一些进程不只是在同一时间做一件事,例如Word,它可以同时进行打字,拼写检查,打印等等。要同时处理多件事情,进程中需要同时运行多个“子任务”,我们将进程中的这些“子任务”称为线程(Thread)。

  因为每个进程至少要做一件事情,因此一个进程至少有一个线程。显然,Word这样的复杂进程可以有多个线程,而且多线程可以同时执行,而且多线程以与多进程相同的方式执行多线程,而且由操作系统快速切换多线程,使每个线程交替运行,看上去似乎与同时执行一样。毫无疑问,同时执行多线程要求多核CPU来实现这一目标。之前写过的所有Python程序,都是单任务执行的进程,即一个线程。假如要一次完成多个任务呢?存在两种解决方法:

  一种是启动多个进程,每个进程虽然只有一个线程,但是多个进程可以执行一个以上的任务。

  此外,还可以启动一个进程中的多个线程,以便多个线程能够同时执行多个任务。

  但是,也有第三种方法,那就是启动多个进程,每一个进程再启动多个线程,这会导致同时执行更多的任务,当然这个模型也更复杂,而实际上很少被采用。

  简单地说,可以通过3种方法实现多任务:

  多重处理方式;

  多线制;

  多线程和多线程。

  并行执行多个任务通常各任务之间并非没有联系,而是需要彼此沟通与协调,有时候,Task1必须暂停等待任务2完成,然后再继续,有些时候,任务3和任务4不能同时执行,因此,与我们之前写的单进程单线程程序相比,多进程和多线程程序的复杂性要高得多。

  由于它的复杂性和调试的难度,所以没有人希望写出多个任务。然而,在许多情况下,多重任务是不可行的。想象用一台计算机看一部电影,必须用一个线程播放视频,另一个线程来播放音频,否则,单线程实现的话,只有播放完视频后,才能播放音频,或者先播放视频,这样显然不能。

  简而言之,线程是最小执行单位,而进程至少包含一个线程。进程和线程的调度方式完全取决于操作系统,程序本身并没有能力决定何时执行、何时执行。那么,进程与线程的知识点同学们都掌握了吗?

上一篇 JavaEE开发培训班哪家好?
下一篇 成为高级Java程序员需要掌握哪些技能