进程
任务调度
- 每个进程都可以看作一个独立的任务
- 计算机在处理各个任务时:
- 为了保证各个任务平等,采用红黑树这种数据结构来应为任务调度
- 红黑树是一种相对平衡的树,在保证各个任务平等的同时,还能保证速度够快(关于红黑树,需要学习数据结构的树状结构部分)
- 这种结构也保证了一个进程死亡时,不会影响到其他进程,各个进程互不关联,软件上完全隔离
- 为了保证各个任务平等,采用红黑树这种数据结构来应为任务调度
进程内存
- 每一个进程有自己单独的内存四区,每个任务都是相互独立,不能操作他人的内存
线程
线程内存
- 线程是进程的子概念,一个进程的各个子线程共享同一片进程的四区
- 线程的特点
- 各个线程有自己独立的栈区,堆区共享
线程作用
- 现代计算机不像单片机,只有一个核心,现在大多数多核计算机,多线程旨在让多个核心同时工作
- 工作方式
- 同时处理多个任务
- 同时处理一个任务的不同分段
简单理解:相当于电脑有多个工人,同时让多个工人干活
多线程问题
- 多线程会引发线程竞争,数据覆盖的问题,尤其是在多线程同时处理一个任务时
- 举个例子
- 中英双语文档站:在做多语言时,编译期直接生成两份HTML,一份中文一份英文,同时工作,结果中文部分的出现了部分英文,尤其是侧边栏最明显,部分中文,部分英文,数据竞争导致数据覆盖,而且英文部分的侧边栏直接丢失
异步
计算机任务分类
- 计算机任务可以分为:IO型,计算型
- IO型任务,一般有专门的硬件来做,比如DMA(单片机中学的)
- 计算型任务:由CPU/GPU来执行
异步与同步
- 同步:
- 硬件水平一般,DMA搬运数据需要CPU来调度,不能独立完成,导致IO堵塞
- 异步:
- DMA一边搬运,CPU一般干其他活
异步问题
- 异步会导致函数先于数据,导致数据丢失问题
- IO与函数同时进行,等到IO完成时,函数早就跑完了,函数用空数据在跑,没有结果
- 对于这种问题,需要注意IO与计算的时序
简单理解:两类任务是两条分支,本来应该可以互不干扰,因为硬件水平问题,以前的IO分支需要CPU分支的帮助