马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 不二如是 于 2020-2-4 21:35 编辑
上一讲(传送门)该说的事情都交代了。
在介绍进程和线程之前,需要先讲解下并行处理。
因为理解了并行处理的概念,那么再理解进程和线程之间的关系就会变得轻松许多。
定义:
并行处理计算机中的并行处理就是同一时刻处理多个任务。
比如我们要计算下面这三个表达式的值,并显示出结果。
代码:
A = 1+"fishc"
B = 30/5
C = 3*6
在编写代码的时候,我们可以把这个过程拆分为四个任务:
- 任务 1 是计算 A=1+"fishc"
- 任务 2 是计算 B=30/5
- 任务 3 是计算 C=3*6
- 任务 4 是显示最后计算的结果。
正常情况下程序可以使用单线程来处理。
也就是分四步按照顺序分别执行这四个任务。
如果采用多线程,会怎么样呢?
我们只需分“两步走”:
通过对比分析,你会发现用单线程执行需要四步,而使用多线程只需要两步。
因此,使用并行处理能大大提升性能。
同时处理多个任务,就是并行处理啦。
线程 VS 进程
多线程可以并行处理任务,但是线程是不能单独存在的。
线程是由进程来启动和管理的。
那什么又是进程呢?
一个进程就是一个程序的运行实例。
详细解释就是:
启动一个程序的时候,操作系统会为该程序创建一块内存,用来存放代码、运行中的数据和一个执行任务的主线程。
我们把这样的一个运行环境叫进程。
为了让鱼油更好地理解上述计算过程,分别画两张图。
单线程:
多线程:
从上面两张图中可以看到:
线程是依附于进程的,而进程中使用多线程并行处理能提升运算效率。
总结来说,进程和线程之间的关系会有 4 个特点。
1. 进程中的任意一线程执行出错,都会导致整个进程的崩溃
例如将任务 2 改为:
由于分母为 0,线程会执行出错,这样就会导致整个进程的崩溃。
当然另外两个线程执行的结果也没有了。
2. 线程之间共享进程中的数据
线程之间可以对进程的公共数据进行读写操作,示意图:
从上图可以看出,线程 1、线程 2、线程 3 分别把执行的结果写入 A、B、C 中。
然后线程 2 继续从 A、B、C 中读取数据,用来显示执行结果。
3. 当一个进程关闭之后,操作系统会回收进程所占用的内存
当一个进程退出时,操作系统会回收该进程所申请的所有资源。
即使其中任意线程因为操作不当导致内存泄漏,当进程退出时,这些内存也会被正确回收。
最早的 IE 浏览器,支持很多插件,而这些插件很容易导致内存泄漏。
这意味着只要浏览器开着,内存占用就有可能会越来越多~
但是当关闭浏览器进程时,这些内存就都会被系统回收掉。
4. 进程之间的内容相互隔离
进程隔离是为保护操作系统中进程互不干扰的技术,每一个进程只能访问自己占有的数据。
也就避免出现进程 A 写入数据到进程 B 的情况。
正是因为进程之间的数据是严格隔离的,所以一个进程如果崩溃了,或者挂起了,是不会影响到其他进程的。
如果进程之间需要进行数据的通信~
这时候,就需要使用用于进程间通信(IPC)的机制了。
暂时不用管 IPC 是什么哦
如果有收获,别忘了评分 :
如果想看更多,请订阅 淘专辑( 传送门)( 不喜欢更要订阅 ) |