线程和进程
操作系统(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行;
进程:
进程是系统进行资源分配和调度的基本单位,是动态过程;(进程是任务调度的最小单位)
由程序段、数据段、进程控制块组成:
·程序段就是能被进程调度程序调度到CPU执行的程序代码段。注意,程 序可以被多个进程共享,就是说多个进程可以运行同一个程序。
·数据段可以是进程对应的程序加工处理的原始数据,也可以是程序执行时 产生的中间或最终结果。
·进程控制块:进程创建时就建立PCB结构,任一时刻可以存取, 在进程结束时删除。PCB是进程实体的一部分,是进程存在的唯一标志。系统通过PCB了解进程的状态信息,以便对其进行控制和管理(操作系统通过PCB来管理和控制进程)
特性:
动态性:进程的实质是程序在多道程序系统中的一次执行过程,动态产生,动态消亡
并发性:进程可以同其他进程一起并发执行
独立性:进程是一个能够独立运行的基本单位,是系统分配资源和调度的独立单位
异步性:由于进程见得相互制约,是进程具有执行的间断性,进程按各自独立的
线程:
进程是拥有资源和独立运行的最小单位,也是程序执行的最小单位;但是进程间的切换开销太大,所以就产生了线程
线程是程序执行中一个单一的顺序控制流程,是程序执行流的最小单位,是处理器调度和分配的基本单位
一个进程可以有多个线程,各个线程之间关系程序的内存空间(即进程的内存空间)
线程:由线程ID,当前指令指针PC,寄存器集合和堆栈组成
同一进程间的线程
共享的资源有:堆,全局变量,静态变量,文件
私有的资源有:栈和寄存器
使用线程的优点:
·可以把占据时间长的程序中的任务放到后台去处理
·用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度
·程序的运行速度可能加快
·在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下可以释放一些珍贵的资源如内存占用等等。
缺点:
·更多的线程需要更多的内存空间。
·线程的中止需要考虑其对程序运行的影响。
·通常块模型数据是在多个线程间共享的,需要防止线程死锁情况的发生。
进程和线程比较
1.进程是操作系统分配资源的最小单位,线程是程序执行的最小单位(CPU调度线程)
2.进程是线程的容器,一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路径
3.进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段、数据集、堆等)及一些进程级的资源(如打开文件和信号),某进程内的线程在其它进程不可见;
4.调度和切换:线程上下文切换比进程上下文切换要快得多。
多线程:
多线程(multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。
[为了使得多个线程并行的工作以完成多项任务,以提高系统的效率]
多线程是为了同步完成多项任务,不是提高运行效率,而是为了提高资源使用效率来提高系统的效率(多线程的出现就是为了提高效率)
多线程的作用:可以解决负载均衡问题,充分利用CPU的资源,为了提高CPU的使用,采用多线程的方法去同时完成几件事情而互不干扰大多数的情况下, 使用多线程主要是需要处理大量的IO操作或处理的情况需要花大量的时间等;
多进程:
同一个时间里,同一个计算机系统中允许两个或两个以上的进程处于并行状态,这是多进程。而这些任务之间丝毫不会相互干扰。
让CPU同时运行多个进程,就必须使用并发技术,实现并发技术最常见的就是时间片轮转调度算法,即在操作系统的管理下,所有正在运行的进程轮流使用CPU,每个进程允许占用CPU的时间非常短,这样用户根本感觉不出来 CPU是在轮流为多个进程服务,就好象所有的进程都在不间断地运行一样,给用户的感觉就是并行。但实际上在任何一个时间内有且仅有一个进程占有CPU。
多进程与多线程的比较:
| 多进程 | 多线程 |
数据共享、同步 | 数据共享复杂,需要用IPC;数据是分开的,同步简单 | 因为共享进程数据,数据共享简单,但也是因为这个原因导致同步复杂 |
内存、CPU | 占用内存多,切换复杂,CPU利用率低 | 占用内存少,切换简单,CPU利用率高 |
创建、销毁、切换 | 复杂,速度慢 | 简单,速度快 |
编程、调试 | 简单 | 复杂 |
可靠性 | 进程间不会相互影响 | 一个线程会影响整个进程 |
分布式 | 适应于多核,多机分布式,扩展到多台机器简单 | 适应于多核分布式 |
应用:
1)需要频繁创建销毁的优先用线程
常用于web服务器,来了一个连接建立一个线程,断了就销毁线程,代价比进程小。
2)需要进行大量计算的优先用线程
大量计算会消耗很多CPU,切换频繁,常见图像处理和算法处理
3)强相关的处理用线程,弱相关的处理用进程
用户线程与内核线程的对应关系有三种模型:一对一模型、多对一模型、多对多模型
一对一模型有两个缺点:1.许多操作系统限制了内核线程的数量,因此一对一模型会使用户线程的数量受到限制;2.许多操作系统内核线程调度时,上下文切换的开销较大,导致用户线程的执行效率下降。
多对一模型两个缺点:1.如果其中一个用户线程阻塞,那么其它所有线程都将无法执行,因为此时内核线程也随之阻塞了;2.在多处理器系统上,处理器数量的增加对多对一模型的线程性能不会有明显的增加,因为所有的用户线程都映射到一个处理器上了。
多对多模型结合了一对一模型和多对一模型的优点,将多个用户线程映射到多个内核线程上。多对多模型的优点有:1.一个用户线程的阻塞不会导致所有线程的阻塞,因为此时还有别的内核线程被调度来执行;2.多对多模型对用户线程的数量没有限制;3.在多处理器的操作系统中,多对多模型的线程也能得到一定的性能提升,但提升的幅度不如一对一模型的高。