线程Thread的引入

分阶段

  • 最开始操作系统只有进程,没有线程

    • 这种操作系统叫做面向进程设计的操作系统
    • 在面向进程设计的系统中,进程是程序的基本执行实体
  • 之后引入了线程

    • 在面向线程设计的系统中,进程本身不是基本运行单位,而是线程的容器
    • 意思是 要运行一个程序,不再是运行一个进程,而是运行这个进程里的一个线程,这个进程已经变成一个容器了。

引入原因

  • 进程是执行的基本实体,也是资源的基本实体
  • 导致进程的创建、切换、销毁太消耗CPU时间了
  • 于是引入线程,线程作为执行的基本实体
  • 而进程只作为资源分配的基本实体

  • 线程其实是一个小进程,进程把执行的事情交给了线程去做,它自己只承担资源的分配

  • 比如把内存分配给进程,这个进程再去开一个线程,让这个线程去用分配到的内存


  • 设计师与工程师

比如要招一个既会设计又会写代的前端,那么这个前端就会忙不过来
所以要分开招两个人,一个设计,一个写代码。
就是 通过把事情分成两件,这样这件事就会变得更加轻量。

线程Thread定义与概念

概念

  • CPU调度和执行的最小单元
  • 一个进程中至少有一个线程,可以有多个进程

  • 一个进程中的线程共享该进程的所有资源

    • 如果你的打印机或者文件被占用了,那一定是进程占用的,因为进程才是资源分配的基本实体
    • 但是 这个进程里的所有线程,都可以使用这个打印机或者文件。
  • 进程的第一个线程叫做初始化线程

  • 线程的调度可以由操作系统负责,也可以用户自己负责

比如:
浏览器进程里面有渲染引擎、V8引擎、存储模块、网络模块、用户界面模块等。
当CPU内存不够时,浏览器可以优先让渲染引擎先执行,其他模块之后再执行。因为如果渲染都渲染不起来,那么其他模块也没什么作用了。
所以线程是可以自己调度的,用户(浏览器)是可以自己调度自己的模块的优先级的
而且每个模块都可以放在一个线程里。

总结来说,线程是轻量级的进程,它可以共享进程里面的所有资源。

子进程与线程

进程是可以开启一个子进程的。
线程也是由进程开启的。

那怎么去用呢
优先使用线程。除非你需要单独去做一个资源分配,你才需要使用子进程。