进程和线程

BY:14组开发周博文 欢迎各位老师和同学指导和指正!

1、进程和线程的概述

  • 进程就是运行中的应用程序。应用程序是静态的,进程是动态的。
  • 查看 任务管理器 中所有正在运行的进程,可以看到每个进程至少对应一个线程。每个进程都用来完成一个任务,每个线程用来完成进程内的一件子任务。如Microsoft Word可以同时进行打字、拼写检查和打印等多件子任务,简单的说,线程就是进程内部的一个执行单元

01进程和线程的概述 - 图1

  • 如上图可以看出,每个进程都有独立的内存空间,而进程内的线程是共享内存空间的
  • 打开操作系统的【任务监视器】中可以看到,操作系统可以同时启动几十个甚至上百个应用。如,我们可以一边听QQ音乐、一边使用Firefox下载文件、一边使用Microsoft Word写文章,这就是多任务。不管是单核CPU还是多核CPU都支持多任务。

01进程和线程的概述 - 图2

  • 如上图可以看出,单核CPU可以同时执行了QQ音乐、Firefox和Microsoft Word三个应用程序,单核CPU会执行很少的时间片段就切换,例如QQ音乐执行0.02秒就切换到Firefox,Firefox在执行0.02秒就切换到Word等等,这样反复轮流的切换交替执行,由于CPU的调度和执行的速度实在是太快了,导致我们感觉就像是多个任务就像是在同时执行一样,但实际上是多个任务交替执行,这个多个任务交替执行的方式称为并发。因此多个任务交替执行的方式称之为并发
  • 如果我们想让多个任务并行,也就是同时执行,只能在多核CPU上进行,并且任务数要小于CPU的核数。

    01进程和线程的概述 - 图3

  • 如上图,核心1运行Microsoft Word,核心3运行QQ音乐,核心4运行Firefox,可以实现多个任务同时运行在多核CPU中,但是这种运行方式只能在多核CPU中,并且任务数要小于CPU的核数这种多个同时执行的方式称之为并行。

  • 目前,几乎所有的计算机CPU都是多核心的了,并且任务数通常要远远大于CPU核数,所以操作系统也会自动的把很多任务轮流调动到每个核心上去执行。

    前面我们说道,每个进程都用来完成一个任务,每个线程用来完成进程内的一件子任务。因此我们想要实现多任务的话有三种方式:
    (1)使用多进程,也就是说启动多个进程,每个进程内默认只有一个线程。
    (2)使用多线程,也就是说启动一个进程,在进程内再启动多个线程。
    (3)使用多进程加多线程,也就是说启动多个进程,在每个进程内再启动多个线程。


01进程和线程的概述 - 图4