我们在使用计算机或者手机的时候可以发现他们都能同时使用多个程序,这里就要涉及到多线程编程,多线程编程能够帮助我们合理的分配并最高效的利用资源,本章节我们就来学习一下多线程中的线程和进程,首先我们来了解一下他们的概念。
1. 进程
概念进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础,通俗的讲,一个进程对应一个程序,而这个程序有它的运行空间和系统资源,在计算机内部,每个进程使用的数据和状态都是独立的,我们也可以称一个进程就是一个任务,下面打开windows的任务管理器来查看一下当前运行的进程。
我们可以发现计算机运行的不仅仅有我们打开的应用,还有很多个后台运行的系统进程,进程就是我们电脑中已经运行的程序的实体,看下图:
然后把每个进程对应一个我们正在运行的应用,这样的多个进程,例如QQ、Pycharm、Steam等这样的应用进程以及系统进程组合在一起构成了我们的操作系统。
2. 线程
线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。我们来举个例子,当我们在影院看电影的时候,影院的影音系统会有一个线程去控制视频的播放,还有会有个线程去控制声音,这样的两个线程组合在一起构成影音播放程序,也就是对应了一个进程。
在Python的程序中一般情况下至少包含一个线程,通常我们称之为主线程,我们运行了程序后,解释器控制主线程的创建和关闭。
3. 线程和进程的区别
1) 地址空间和其它资源(如打开文件):进程间相互独立,同一进程的各线程间共享,某进程内的线程在其它进程不可见。
2) 通信:进程间通信IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信——需要进程同步和互斥手段的辅助,以保证数据的一致性。
3) 调度和切换:线程上下文切换比进程上下文切换要快得多。
4) 在多线程OS中,进程不是一个可执行的实体。
5) 进程是资源分配的最小单位,线程是程序执行的最小单位。
4. 线程和进程的优劣
1) 线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信是以通信的方式进行。
2) 多进程程序更为安全,多线程程序中有一个线程出现问题,整个进程也就死掉了,而多进程的程序保障了一个进程死掉的时候不会影响到另外的一个进程。
5. 总结
进程和线程是操作系统中的核心理念,也是并发控制的关键内容,本章的内容在大家学习操作系统的时候能提供很大的帮助,也可以使用Python中的相关模块去解决相应的操作系统中的问题。
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程