了解进程与线程
前言
【了解进程与线程】进程与线程的区别是每年考试的核心,也是面试官最爱问的问题。弄清楚二者的区别,首先要弄清楚进程与线程是什么。
进程
打开我们的任务管理器,我们可以看到当前在电脑运行的所有进程
文章图片
比如说我打开了三个qq,那么就启动了三个qq进程,但是qq程序在磁盘里就一份可执行文件。这就引出了程序与进程的区别:
程序是静态的,就是存放在磁盘里的可执行文件,就是一系列的指令集合。
进程是动态的,是程序的一次执行过程。同一个程序多次执行会对应多个进程。
为了区分这三个进程,每个进程都会被操作系统分配一个唯一的不重复的进程号————PID。
一个进程里的程序能够执行,操作系统就需要给他分配资源。不是说我把可执行文件拿过来就可以运行,运行肯定还需要分配内存来缓存各种信息,如聊天记录等,同时,有的程序还需要使用I/O设备,如wps需要使用打印机时,需要给他分配打印机。于是,操作系统需要记录给进程分配了哪些资源。
同时,操作系统也需要记录进程的运行情况,如CPU使用时间、磁盘使用情况、网络流量使用情况等。
这些信息被保存在一个专门的数据结构PCB(Process Control Block)中,即进程控制块。
PCB是进程存在的唯一标志,当进程被创建时,操作系统为其创建PCB,当进程结束时,会回收其PCB。
文章图片
当程序被调用时,除了创建PCB保存进程的各种信息外,程序文件也会被放入内存里,同时,程序运行中产生的各种数据也会放入内存。所以说,一个进程实体(进程映像)由PCB、程序段、数据段组成。
说了这么多进程的知识,为什么要有进程呢?
当产生多道操作系统后,允许了多个程序并发执行。但是多个程序并发执行又会有一些问题,多个程序都去请求一个资源,就会导致资源不知道听谁的,同时也会导致资源不够用的问题。多个程序并发执行也使得程序之间失去了封闭性,导致A程序更改B程序操作的问题。针对这些问题,提出了进程的概念。当创建进程时,也对应的给他分配所需要的资源,使得使用资源之间不再有冲突。同时在进程之间不得互相影响,解决了封闭性问题。
所以说,进程是系统进行资源分配和调度的一个独立单位。一个进程可以独立运行。
线程
文章图片
引入进程后,更好的使得多道程序并发执行,提高了资源利用率。但是因为进程间的资源相互独立,所以进程间切换是资源的切换,开销相当大。同时也使得一个程序可以并发执行各种功能,如qq拥有视频聊天和文字聊天两个功能,如果仅仅使用进程,进程成了CPU调度的基本单位,CPU只会为进程分配一个核心,无法并发执行两个功能。为了解决这些问题,引入了线程的概念。
线程最直接的理解就是“轻量级进程”。线程代替进程成为了CPU调度的一个最小单位。而进程依然是资源分配的最小单位。一个进程拥有多个线程,线程不拥有系统资源,而是访问其隶属进程的系统资源,同一进程的线程之间资源共享。
文章图片
不仅进程之间可以并发执行,多个线程之间也可以并发执行,从而使系统具有了更好的并发性。
4核8线程
4核代表4个核心,也就是可以同时执行4个线程。
那么8线程是什么呢,原来CPU使用了一种超线程技术,使得每一个核心在执行一个线程剩余的资源,拿去执行另外一个线程,也就是说,其实CPU拥有4个核心,但是可以并发执行8个线程。
超线程技术在桌面端很有用,但是到了服务器端,并不被使用,也就是说,他也是有弊端的。
总结
进程是资源分配的基本单位,线程是CPU调度的基本单位。
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- Docker应用:容器间通信与Mariadb数据库主从复制
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量
- 第326天
- Shell-Bash变量与运算符
- 我们重新了解付费。
- 拍照一年啦,如果你想了解我,那就请先看看这篇文章
- 逻辑回归的理解与python示例
- Guava|Guava RateLimiter与限流算法
- C语言中的时间函数clock()和time()你都了解吗