【前言】
进程是独占系统资源的,进程与进程之间是互相独立的,彼此之间是竞争关系。
进程的独立性:进程的地址空间。
共享:共享内存,共享库(动态库)
比进程更轻量化,在进程内部运行的执行流称之为线程,
Linux下的进程,也叫做轻量级进程,CPu在调度的时候,只看PCB,是进程的,也可能是线程的。
Linux不知道什么进程线程,它看到的都是轻量级进程
线程是轻量级进程(把线程形容的粗了),进程是轻量级进程(把进程形容的细了)
内部只有一个线程的进程
线程在进程内部运行,多个线程在进程的地址空间运行
Linux下的线程使用PCB模拟的,Linux下没有真正意义上的线程,只有进程模拟的。工作量更小,
进程是承担分配系统资源的实体
线程是调度的基本单位
开辟进程:创建PCB,地址空间,页表,开辟内存,加载数据,建立映射关系,资源分配好。
开辟线程:在进程地址空间中多了一个PCB,把进程已有的资源分配给它。
一个进程内部包含了多个执行流,包括了多个资源,线程是进程内部的一个执行流。
进程多数资源是私有的,但是也有共享的。线程多数资源是共享的,但是也有共享的。
页表:深入理解计算机操作系统
.hpp函数既有声明,又有实现
.h一般只有声明
保护临界资源的手段:同步和互斥
线程概念
线程,有时也被称为轻量级进程,是程序执行流的最小单位,线程在进程内部运行,本质上是在进程地址空间内运行。线程是进程中的一个实体,是被系统独立调度和分配的最小单位。线程也有就绪、阻塞和运行三种基本状态。就绪状态是指线程具备运行的所有条件,逻辑上可以运行,在等待处理机;运行状态是指线程占有处理机正在运行;阻塞状态是指线程在等待一个事件(如某个信号量),逻辑上不可执行。每一个程序都至少有一个线程,若程序只有一个线程,那就是程序本身。在单个程序中同时运行多个线程完成不同的工作,称为多线程。
线程优点
- 线程的创建与删除的代价比进程小得多
- 线程之间的切换比进程之间的切换更加简单,操作系统需要做的工作更少,线程的调度成本少很多。切换进程:①进程上下文,②进程页表,③进程地址空间。线程间的切换:只切换上下文
- 线程占用的资源比进程少
- 能充分利用多处理器的可并行数量
- 等待慢速I/O结束时,程序可执行其他的计算任务,例如下载电影时的边下边播
- 计算密集型应用,代码或者逻辑以计算为主,加密、解密,将计算分解到多个线程处理
- I/O密集型应用,读写文件、访问数据库,线程可以同时等待不同的I/O操作
catch:存在于CPU和内存之间,CPU内部有寄存器,在寄存器更加靠外一点有catch,硬件层面上的快速缓存,把内存里的数据catch到catch里。进程切换还要切换catch,线程不需要。正在执行的某行代码,会把这行代码附近的内容都放到catch中,cpu执行后续代码就不需要到内存中去了,提高效率。
线程缺点
- 性能损失,增加了额外的同步和调度开销
- 健壮性降低,一个线程出错,其他所有线程都跟着遭殃。线程之间是缺乏保护的
- 缺乏访问控制,线程能访问这个进程的全体资源&