进程

任务调度

  1. 每个进程都可以看作一个独立的任务
  2. 计算机在处理各个任务时:
    • 为了保证各个任务平等,采用红黑树这种数据结构来应为任务调度
      • 红黑树是一种相对平衡的树,在保证各个任务平等的同时,还能保证速度够快(关于红黑树,需要学习数据结构的树状结构部分)
      • 这种结构也保证了一个进程死亡时,不会影响到其他进程,各个进程互不关联,软件上完全隔离

进程内存

  • 每一个进程有自己单独的内存四区,每个任务都是相互独立,不能操作他人的内存

线程

线程内存

  1. 线程是进程的子概念,一个进程的各个子线程共享同一片进程的四区
  2. 线程的特点
    • 各个线程有自己独立的栈区,堆区共享

线程作用

  • 现代计算机不像单片机,只有一个核心,现在大多数多核计算机,多线程旨在让多个核心同时工作
  • 工作方式
    1. 同时处理多个任务
    2. 同时处理一个任务的不同分段

简单理解:相当于电脑有多个工人,同时让多个工人干活

多线程问题

  • 多线程会引发线程竞争,数据覆盖的问题,尤其是在多线程同时处理一个任务时
  • 举个例子
    • 中英双语文档站:在做多语言时,编译期直接生成两份HTML,一份中文一份英文,同时工作,结果中文部分的出现了部分英文,尤其是侧边栏最明显,部分中文,部分英文,数据竞争导致数据覆盖,而且英文部分的侧边栏直接丢失

异步

计算机任务分类

  • 计算机任务可以分为:IO型,计算型
    • IO型任务,一般有专门的硬件来做,比如DMA(单片机中学的)
    • 计算型任务:由CPU/GPU来执行

异步与同步

  • 同步:
    • 硬件水平一般,DMA搬运数据需要CPU来调度,不能独立完成,导致IO堵塞
  • 异步:
    • DMA一边搬运,CPU一般干其他活

异步问题

  • 异步会导致函数先于数据,导致数据丢失问题
    • IO与函数同时进行,等到IO完成时,函数早就跑完了,函数用空数据在跑,没有结果
  • 对于这种问题,需要注意IO与计算的时序

简单理解:两类任务是两条分支,本来应该可以互不干扰,因为硬件水平问题,以前的IO分支需要CPU分支的帮助