进程,线程与多核处理
进程
引入进程的目的是为了使多个程序可以并发执行,以提高资源的利用率和系统的吞吐量。、
一,进程的概念
是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。 qq,讯雷等软件工作,内部需要很多个模块相互协调,而这些模块都是一个进程。
程序是一个静态概念,而进程是一个动态的概念,他着眼于活动运行过程。一个程序可以有很多个进程组成,而一个进程又由很多个线程组成。
进程是资源分配和调度的基本单位。
进程的特点:
- 动态性:由产生,到消亡
- 并发性:多个进程可以同时装入内存中
- 独立性:进程是操作系统完成工作的基本单元
- 异步性:各个并发的进程相互独立
- 结构性:由程序段,数据段,进程控制块(PCB)组成
二,进程的实体
共由三部分组成
程序:进程运行所对应的执行代码
数据集合:所用到的数据和开辟的工作区域
进程控制块(PCB):
用于描述和标志进程,包括进程名称,当前状态,进程的优先级等
PCB是进程存在的唯一标志
三,进程的状态与转换
进程的三种基本状态:
- 就绪状态
- 执行状态
- 阻塞状态(等待状态)
四,进程控制
内核:是操作系统中最常用,最核心的内容,他可以对进程进行控制,在操作系统中必须设置一个机构,他具有创建进程,撤销进程以及其他管理功能。
通过内核中定义的“原语”来控制进程,原语可分为四大类:
- 创建原语
- 撤销原语
- 阻塞原语
- 唤醒原语
原语的特点:一旦执行,不能中断。(注意原语只能对进程操作,而不能操作线程)
五,进程和程序的区别
进程的定义及其与程序的区别
- 进程定义:进程是程序段的一次运行过程,他是系统资源分配的一个独立单位
- 他着眼点是运行的过程,是一个动态的概念
- 而程序是一组指令的集合是一个静态的概念
线程
引入线程的目的是为了减少某个进程并发执行时所付出的时空开销
一,线程简介
线程是比进程更小的能独立运行的基本单位,因此,在为其创建,撤销和切换时,所需要付出的开销也就更少,因此能显著提高并发的程度。
QQ 和浏览器是两个进程,浏览器进程里面有很多线程,例如 HTTP 请求线程、事件响应线程、渲染线程等等,线程的并发执行使得在浏览器中点击一个新链接从而发起 HTTP 请求时,浏览器还可以响应用户的其它事件。
线程是系统调度的基本单位
二,线程的状态
与进程类似,也包含:
- 就绪状态
- 执行状态
- 阻塞状态(等待状态)
三,线程的控制
线程的控制是通过操作系统提供的“线程操作库”来控制的。
常见的操作包括:
- 创建
- 撤销
- 等待
- 线程让权(线程自己放弃cpu的使用)
进程通信和线程通信
一个程序至少有一个进程,一个进程至少有一个线程。
进程是内存分配的基本单位;
线程是系统调度的基本单位;
即同一个进程下的所有线程,共有着同一内存空间,所以同一进程间线程通信的方式为: 访问共享变量 ;
不同进程占有不同的内存资源,所以并不能直接通信,需要其他方式,例如:
- 管道
- 消息队列
- 信号量:不能传递复杂消息,只能用来同步
- 共享内存:使不同进程共享同一块内存,能够很容易控制容量,速度快,但为了安全,要使用同步策略(信号量或PV操作)。
多处理器,超线程和多核
你是个包工头,以前你只能指挥1个工人去盖一个房子。你就是一个核心,这1个工人就是一个线程。这叫单核单线程。
后来你觉得这么做太慢,一个工人搬砖时候完全可以多点工人去做其他的比如砌墙,打桩。后来你又招了一群工人。这叫单核多线程。
再后来你发现,你同时只能指挥一群人盖一个房子,为了加快盖房子速度,你又找了你兄弟做另一个包工头。这样就变成了多核多线程。
- 多处理器结构:
- 一个电脑有多个处理器,共同执行任务
- 成本比较高
- 超线程:
- 与一般的并发不同,超线程是真正意义上的并行,宏观和微观上都是真并行的
- 虽然可以让一个cpu同时执行任务,但是不像多个CPU资源是独立的,还是会存在阻塞的状态
- 多核结构:
- 一个CPU有多个执行核,每个核有自己的资源
- 多核超线程:
- 就是将多核和超线程结合在一起