线程进程协程1:计算机基础

982 阅读6分钟

线程进程和协程是计算机领域非常重要的知识,也是面试中的常考点。

这个系列的文章,我将由浅入深,把这块的知识点逐一击破,同时,我会尽可能的通过代码,来对重要知识点进行模拟。

当然,由于笔者能力有限,也许会对一些概念的理解有失偏颇,欢迎讨论交流。

计算机组成原理

在进入线程进程和协程之前,我觉得有必要先对计算机基础知识做一个回顾,万丈高楼平地起。

冯诺依曼体系

冯诺依曼体系把计算机抽象成五大核心部件,也即是前面提到的存储器、运算器、控制器、输入设备、输出设备。此后,便奠定了现代计算机的基础,到今天虽然计算机经历了翻天覆地的变化,但本质上来讲,今天的计算机依然属于冯诺依曼计算机。

image.png

具体来讲:

  • 存储器,负责数据的存储。有内存、磁盘、SSD,这三个设备,其中内存、磁盘、SSD三者速度、价格等特性各不相同,各司其职。
  • 运算器,负责数据的运算。主要有CPU、显卡。其中CPU负责常规运算,显卡专注于3D、图形矩阵的运算。
  • 控制器,负责计算机运行的总协调。主要是CPU,CPU除了负责常规运算以外,还负责计算机运行的总控制,让计算机各个部件可以协调、有序不紊的运行。
  • 输入设备,负责接收数据的输入。主要是键盘、鼠标,分别接受字符输入和图形输入。
  • 输出设备,负责计算机运算结果的输出。主要是显示器、音箱,显示器负责视频内容的输出,音箱负责声频内容的输出。

CPU

CPU主要由三个部分组成,控制器、运算器和高速缓存。

image.png

控制器负责协调和控制计算机各个部件有序不紊的运行。在控制器的内部,又有程序计数器、指令译码器、时序发生器等各司其职。

运算器主要负责数据的运算加工,ALU是运算器的核心部件,平时使用的加减乘除、与或非、移位等操作,都发生在运算器。

高速缓存是存在于CPU内部的高速存储器,在CPU工作的过程当中,CPU也需要空间来存储数据,如果每次存储都需要和内存打交道的话,将会极大的降低CPU的性能,所以在CPU内部,也会集成一些存储器,也称为寄存器,它的读写速度远大于内存。

存储器

在计算机的硬件设备中,内存、磁盘、SSD以及CPU内部的高速缓存等,从功能上来讲都属于存储器。

根据位价、速度的不同,可以把存储器划分为三个层次:高速缓存-主存-辅存。

高速缓存典型的特点就是位价高,并且速度快,它是为了适应CPU的运算速度而设计的存储器,拥有极高的读写速度,对应的位价也是最高的,因此容量一般较小,一般以MB为单位。

主存相比高速缓存,位价适中、速度适中,它的存在是为了解决CPU高速缓存容量不足的问题,有了主存,当CPU在运算过程中从高速缓存中找不到需要的数据时,也可以比较快速的从主存中找到,避免从磁盘中加载,这将会花费很长的CPU时间。

辅存指的就是机械硬盘、SSD等外围存储设备,辅存也叫做辅助存储,它是容量最大、读写速度最慢、位价最低的一种存储器,在使用计算机的过程中,可以把大量的暂时不会用到的数据存储在辅存上。

image.png

操作系统

操作系统的内容比较多,为了防止本文篇幅过长,我选一些重点的知识概念进行介绍。

用户态和内核态

用户态的程序工作在用户空间,用户空间指的是存放用户代码程序和数据的存储空间,它是一个虚拟空间。

处于用户态的程序有以下几个特点:

  • 进程只能执行用户自己的代码
  • CPU在特权级最低的用户代码中运行
  • CPU只能访问有限的内存
  • 程序不允许访问外围设备,如:磁盘、网卡等

与用户态对应是内核态,内核态的程序运行在内核空间,内核空间指的是存放内核代码程序和数据的存储空间,它也是一个虚拟空间。当用户状态的进程通过执行系统调用,就进入内核代码执行,这个时候进程就处于内核态。

处于内核态的程序有以下几个特点:

  • CPU处于特权级最高的内核代码中执行
  • CPU可以访问所有的内存和数据
  • 程序允许访问外围设备

并发和并行

并发指的是两个或者以上的事件在同一时间间隔发生。

并行指的是两个或者以上的事件在同一时刻发生。

同步和异步,阻塞和非阻塞

阻塞、非阻塞强调的是程序在等待调用结果时的状态,而同步、异步描述的是这个程序是用哪种方式进行通信的。一个是状态、一个是通信机制。

阻塞对应的就是同步调用的时候对应的状态,当被调用方没有回应前,因为调用方会一直等待,这个时候,程序不能进行别的工作,所以被称为阻塞状态;而非阻塞则对应的是异步调用的时候对应的状态,当被调用方没有回应之前,调用方也没有白白浪费时间在等待上,而是转而去做别的事情,整个程序是没有停止运转的,这个状态我们就称为非阻塞状态。

CPU密集型和IO密集型

CPU密集型任务是指需要占用大量CPU时间的任务,在逻辑上,体现为需要进行复杂运算的程序。这种任务执行的时间取决于CPU的运行时间。

IO密集型体现为需要频繁读写磁盘、读写网络的程序,其完成的速度取决于IO设备的运转速度,当磁盘转速越快或者网卡带宽越大、网速越快,程序越快完成。