进程和线程的基本概念和区别
什么是进程?
首先关于什么是进程,百度百科是这样解释的。
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体
我们可以这样理解,进程是一个程序运行的过程。是系统进行资源分配和调度的基本单位。
也可以形象一点,按下键盘的Alt+Ctrl+Delete,我们就会打开任务管理器,就会出现如下的画面
打开后我们可以看到左上角有一个进程的专栏,打开后,我们看到下面所有的像是wps、腾讯等等全部都是进程。
什么是线程?
百度百科是这样解释的。
线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。
我们就可以理解为,进程的最小执行单位就是线程。
除此之外,还有如下概念
- 一个进程可以有很多线程,每条线程并行执行不同的任务。
- 线程是独立调度和分派的基本单位。
- 同一进程中的多条线程将共享该进程中的全部系统资源,如虚拟地址空间,文件描述符和信号处理等等。
- 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
在以上的概念的最后一条我们可以看到并发和并行的字眼。我们可能会无法理解。是的,既然要搞清楚多线程的概念,那么就一定要搞清楚并发和并行的区别。
并发和并行
在以上的概念的最后一条我们可以看到并发和并行的字眼。我们可能会无法理解。是的,既然要搞清楚多线程的概念,那么就一定要搞清楚并发和并行的区别。
并发
我们可以举个例子来解释并发
现在有5个人要在同一个房子做东西,他们做的东西都是相互独立的,现在按照一定的顺序,让他们每个人做一段时间出来换另外一个人做。不断的重复。
也就是每个人都会占用一定时间的工作间,而假如我们把他们每个人工作的时间都缩短为非常小的时候,以至于我们用肉眼看不出来他们是在换人进去的时候,就达到并发的效果了。
并行
解释完并发后,并行解释起来就相对来说容易一点。
既然并发并不是严格上的同时进行,那么并行就是在时间上严格意义的同时执行。
我们继续用上面的例子。此时我们可以看到,这5个人同时进入到工作间同时的在做任务。这就是并行。对于单cpu而言,电脑是做不到并行的,因为同一时间一个cpu只能处理一个进程。所以并行只会发生在多cpu情况下。
进程和线程的区别
进程和线程
1、进程是资源调度、线程是cpu调度
2、进程拥有独立的地址空间,线程是共享进程中的数据
3、多进程程序更加健壮
4、线程之间的通信更加方便,同一进程下的线程共享全局变量,静态变量
并发和并行的区别
并发:多个线程操作同一个资源,不是同时执行,而是交替执行,单核CPU, 只不过因为CPu
时间片特别短,所以看起来就是同时执行。
并行:并行指的是真正的同时执行,多核CPu,每一个线程使用一个单独CPU去运行
如何提高系统的并发能力
垂直扩展:
增强计算机的硬件性能:增加cpu核数,内存升级,磁盘扩容
提升系统的架构能力:使用cache提高效率
水平扩展:
集群、分布式
总结
为什么操作系统上可以同时运行多个程序而用户感觉不出来?
这是因为无论是单CPU还是多CPU,操作系统都营造出了可以同时运行多个程序的假象。实际的过程操作系统对进程的调度以及CPU的快速上下文切换实现的:每个进程执行一会就先停下来,然后CPU切换到下个被操作系统调度到的进程上使之运行。因为切换的很快,使得用户认为操作系统一直在服务自己的程序。
再来解释并发就容易理解多了。
并发(concurrent)指的是多个程序可以同时运行的现象,更细化的是多进程可以同时运行或者多指令可以同时运行。但这不是重点,在描述并发的时候也不会去扣这种字眼是否精确,并发的重点在于它是一种现象。并发描述的是多进程同时运行的现象。但实际上,对于单核心CPU来说,同一时刻只能运行一个进程。所以,这里的"同时运行"表示的不是真的同一时刻有多个进程运行的现象,这是并行的概念,而是提供一种功能让用户看来多个程序同时运行起来了,但实际上这些程序中的进程不是一直霸占CPU的,而是执行一会停一会。
所以,并发和并行的区别就很明显了。它们虽然都说是"多个进程同时运行",但是它们的"同时"不是一个概念。并行的"同时"是同一时刻可以多个进程在运行(处于running),并发的"同时"是经过上下文快速切换,使得看上去多个进程同时都在运行的现象,是一种OS欺骗用户的现象。
实际上,当程序中写下多进程或多线程代码时,这意味着的是并发而不是并行。并发是因为多进程/多线程都是需要去完成的任务,不并行是因为并行与否由操作系统的调度器决定,可能会让多个进程/线程被调度到同一个CPU核心上。只不过调度算法会尽量让不同进程/线程使用不同的CPU核心,所以在实际使用中几乎总是会并行,但却不能以100%的角度去保证会并行。也就是说,并行与否程序员无法控制,只能让操作系统决定。
再次注明,并发是一种现象,之所以能有这种现象的存在,和CPU的多少无关,而是和进程调度以及上下文切换有关的。
理解了概念,再来深入扩展下。