目录
并发编程
1.进程调度
2.系统开销
3.并发执行
4.资源分配
进程和线程的关系
安全问题
1. 线程模型
2.进程模型
线程
并发编程
1.单核 CPU 的发展遇到了瓶颈. 要想提高算力, 就需要多核 CPU. 而并发编程能更充分利用多核 CPU资源。
2.有些任务场景需要 "等待 IO", 为了让等待 IO 的时间能够去做一些其他的工作, 也需要用到并发编
程
cpu进入了多核心的时代 要想进一步提高执行速度就要充分的利用CPU的多核资源
多进程编程 已经可以解决并发编程的问题,但是又由于多进程创建、销毁、调度一个进程系统开销大。
进程和线程的区别
1.进程调度
(进程是系统分配资源的最小单位,线程是系统调度的最小单位)
操作系统 实际调度的时候 是以线程为单位调度的(进程调度相当于每个进程里面只有一个线程这样的情况)如果每个进程有多个线程了,每个线程是独立在CPU上调度的 =>线程是操作系统调度执行的基本单位
2.系统开销
在创建、销毁、调度一个进程时候,系统为进程的资源分配回收上开销大,而线程也叫“轻量级进程”解决并发编程问题的前提下,让创建 销毁 调度都的速度更快一些
3.并发执行
不仅进程之间可以并发执行,同一个进程的多个线程之间也可以并发执行,每个线程也有自己的执行逻辑(执行流)
4.资源分配
系统在运行的时候会为每个进程分配不同的内存空间,而对线程来说,系统除了CPU外,不会为线程分配内存,线程之间只能共享资源。同一个进程里多个进程之间,共用了进程的同一份资源(主要指的是内存和文件描述符)
内存是指:你线程1new的对象 再线程2,3,4里边都可以直接使用
文件描述符是指:线程1打开的文件再线程2,3,4里都可以直接使用
进程和线程的关系
进程和线程属于 一对多关系,一个进程可以包含多个线程(不能没有) 只有第一个线程启动的时候 开销比较大 后续线程就容易了
一个线程也是对应一个PCB 一个进程里面可能是对应一个PCB也可能是对应多个了
PCB里的状态,上下文,优先级,记账信息,都是每个线程有自己的,各自记录各自的
但是同一个进程里的PCB之间,pid是一样的,内存指针和文件描述符也是一样的
安全问题
(多线程会提高效率但不如多进程安全)
线程模型
天然是资源共享的,多线程强同一个资源(同一个变量)非常容易触发线程安全问题
进程模型
天然是资源隔离的不容易出发 进行进程间通信的时候 多个进程访问同一个资源 可能会出现问题