进程与线程基本概念

一切都是为了提高系统资源利用率,提高系统吞吐量而生。

背景

最初的时候的计算机完全由用户输入的指令控制执行,当用户停止时,计算机也会停止。这样效率及其低下。尽管后面出来的批处理系统可以将指令形成一套连续的流程对计算机进行控制,但是运行方式 仍然是串行的,内存中永远都是只有一个程序在运行,所以批处理效率也并不高。

内存完全是可以存在多个程序同时进行的。于是,进程由此诞生,进程是程序的⼀次执行过程,是系统运行程序的基本单位,因此进程是动态的,各个进程之间互相不干扰。同时进程保存着程序每一个时刻运行的状态。

    此时,CPU采用时间片轮询的方式运行进程:如果时间片结束进程还没有执行完毕,则暂停这个进程的运行,并且把CPU分配给其他的进程,这个过程就叫做上下文切换。

    它的出现让操作系统的并发成为了可能,虽然并发从宏观上看有多个任务在执⾏,但在事实上,对于单核CPU来说,任意具体时刻都只有⼀个任务在占⽤CPU资源。  

线程的提出

进程的出现并不能让人们满足,如果⼀个进程有多个⼦任务时,只能逐个得执行这些子任务,很影响效率。为了同时让这些子任务同时执行,于是线程的提出变成了理所当然,每个线程负责一个单独的子任务

线程与进程相似,但线程是⼀个⽐进程更小的执⾏单位。⼀个进程在其执⾏的过程中可以产生多个线
程。与进程不同的是同类的多个线程共享同⼀块内存空间和⼀组系统资源,所以系统在产生⼀个线程,
或是在各个线程之间作切换⼯作时,负担要⽐进程小得多,也正因为如此,线程也被称为轻量级进程。

一个进程拥有多个线程


多线程实现并发的好处

1.进程间的通信比较复杂,而线程间的通信比较简单,通常情况下,我们需要使用共享资源,这些资源在线程间的通信比较容易。
2.进程是重量级的,而线程是轻量级的,故多线程方式的系统开销更小。

两者之间的区别

进程是一个独立的运行环境,而线程是在进程中执行的一个任务。它们本质的区别是是否单独占有内存地址空间及其它系统资源

1.进程单独占由一定的内存地址空间,它们之间是存在内存隔离,数据是分开的,数据共享复杂但是同步简单各个进程之间互不干扰;而线程共享所属进程占用的内存地址空间和资源,数据共享简单,但是同步复杂。
2.进程单独占有一定的内存地址空间,一个进程出现问题不会影响其它进程,不影响主程序的稳定性,可靠性高;一个线程奔溃可能影响整个程序的稳定性,可靠性低。
3.进程单独占有一定的内存地址空间,进程的创建和销毁不仅仅需要保存寄存器和栈信息,还需要资源的分配回收以及页调度,开销大;线程只需要保存寄存器和栈信息,开销小。

进程是操作系统进行资源分配的基本单位,而线程是操作系统进行调度的基本单位,即CPU分配时间的单位。

并发与并行

并发: 同⼀时间段,多个任务都在执行 (单位时间内不⼀定同时执行 )。
并行: 单位时间内,多个任务同时执行 。

评论