当前位置:网站首页>多线程(一) 进程与线程
多线程(一) 进程与线程
2022-07-05 17:41:00 【无忧*】
目录
一、进程
1、什么是进程
进程是操作系统对一个正在运行的程序的一种抽象,换言之,可以把进程看做程序的一次运行过程。
在文件里面,我们经常可以看到一些后缀为.exe文件,这些文件称为"可执行文件"。一旦执行这类文件,操作系统就会把该文件加载到内存里,CPU会执行这个文件内部的一些指令,此时这些运行起来的应用程序就是进程。
2、操作系统是怎么管理进程的
(1)描述一个进程
明确一个进程上面的一些相关属性,主要是操作系统通过使用c/c++的"结构体"来进行描述的(在操作系统中称为进程控制块PCB)。
(2)组织若干个进程
典型的实现:使用双向链表把每个进程的PCB串起来,方便进行增删查改
其中,"创建进程"就是先创建出PCB,然后再把PCB加到双向链表中去;"销毁进程"就是找到链表上的PCB,从链表上进行删除;"查看任务管理器"就是遍历这个链表。
(3)进程间通信
进程之间是相互独立的,但也可以通过一些手段进行交互。操作系统提供了很多种"公共空间"(一般是文件操作和网络操作),进程A将数据放到公共空间,然后进程B再取走,这就是进程间通信。
(4)PCB中的一些属性
① pid:就是进程的id,对进程进行身份识别的id。
②内存指针:指明了进程所要执行的代码/指令在内存的哪里,以及这个进程执行所依赖的数据在的哪里(.exe运行时操作系统就会把.exe加载到内存中去,变为进程)。
③文件描述符表:只要进程每打开一个文件,文件描述符表上就会增加一项。文件描述符表可以视为一个数组,其中每一个元素都是一个结构体。一个进程只要启动,系统就会自动打开标准输入,标准输出,标准错误三个文件。
④状态:描述了当前的进程接下来该怎么调度。
就绪状态:随时可以被执行。
阻塞状态:暂时不可以去CPU上执行。
⑤优先级:当我们有很多个任务时,先给哪个任务分配时间,后给哪个任务分配时间;哪个任务的时间多,哪个任务的时间少,这就是优先级。
⑥记账信息:统计每个进程分别执行了多久、执行了哪些指令、排队了多久。给进程调度提供指导依据。
⑦上下文:表示上次进程被调度出CPU的状态,下次进程上CPU的时候就可以恢复此前的状态,然后继续往下执行了。类似于存档 + 读档。
进程被调出CPU之前,要先把CPU中的所有寄存器中的数据给保存到内存中,相当于存档
下一次进程再被调度上CPU的时候,就可以从内存中恢复到寄存器中,相当于读档
(5)进程调度
进程调度:进程调度程序是操作系统的真正核心,它直接负责CPU的分配。系统中所有进程都是在CPU上运行的,进程调度就是它们的切换开关
二、线程
1、什么是线程
线程是进程内部的一个部分,进程包含线程。如果把进程想象为一个工厂的话,那么线程就是工厂内部的生产线。一个工厂可以有一个生产线,也可以有多个生产线。
2、为什么要有线程
由于系统支持多任务,因此我们需要进行"并发编程"。
虽然通过多进程也可以实现并发编程,但是频繁的创建/销毁进程的成本非常高,而频繁的调度进程成本也很高(因为创建进程是需要对资源进行申请,而销毁进程则需要释放资源,这本身就是非常低效的)
解决方法:使用线程来实现并发编程。线程更加轻量,每个线程执行一个任务,也可以并发编程。创建、销毁、调度线程成本都是低于进程的(进程需要申请释放资源,而线程包含在进程中,与其中的其他线程共用同一块资源,再创建线程不必再分配资源。但是并不是说线程越多越好,在任务比较少的时候,多线程反而会降低效率)
三、进程与线程的异同点
1、进程是包含线程的. 每个进程至少有一个线程存在,即主线程。
2、进程和进程之间不共享内存空间. 同一个进程的线程之间共享同一个内存空间。
3、操作系统创建进程,要给进程分配资源,进程是操作系统分配资源的基本单位;
操作系统创建线程,是要在CPU上调度执行的,线程是操作系统调度线程执行的基本单位。
4、进程有独立性。每个进程都有各自的虚拟地址空间,一个进程出现问题,不会影响到其他进程。而同一个进程中的多个线程同用一个内存空间,如果一个线程出现问题,很可能会影响到其他线程,也有可能直接导致整个进程出现问题。
边栏推荐
- This 17-year-old hacker genius cracked the first generation iPhone!
- Knowledge points of MySQL (7)
- 基于YOLOv3的口罩佩戴检测
- Cartoon: a bloody case caused by a math problem
- Operation before or after Teamcenter message registration
- 读libco保存恢复现场汇编代码
- 开户复杂吗?网上开户安全么?
- "Xiaodeng in operation and maintenance" is a single sign on solution for cloud applications
- Oracle Recovery Tools ----oracle数据库恢复利器
- Why is February 28 in the Gregorian calendar
猜你喜欢
What are the requirements for PMP certification? How much is it?
Daily exercise: a series of dates
To solve the problem of "double click PDF file, pop up", please install Evernote program
VBA drives SAP GUI to realize office automation (II): judge whether elements exist
Cmake tutorial Step2 (add Library)
Zabbix
Mongodb (quick start) (I)
Ten capabilities that cyber threat analysts should have
Why is all (()) true and any (()) false?
漏洞复现----48、Airflow dag中的命令注入(CVE-2020-11978)
随机推荐
Delete some elements in the array
GFS分布式文件系统
ISPRS2022/云检测:Cloud detection with boundary nets基于边界网的云检测
ELK日志分析系统
Tita 绩效宝:如何为年中考核做准备?
使用QT设计师界面类创建2个界面,通过按键从界面1切换到界面2
查看自己电脑连接过的WiFi密码
EPM相关
Kafaka技术第一课
钉钉开放平台小程序API的缓存接口都有哪些内容?
Cartoon: interesting pirate problem (full version)
Short the command line via jar manifest or via a classpath file and rerun
Sentinel-流量防卫兵
Customize the theme of matrix (I) night mode
Knowledge points of MySQL (6)
CVPR 2022 best student paper: single image estimation object pose estimation in 3D space
tkinter窗口预加载
Six bad safety habits in the development of enterprise digitalization, each of which is very dangerous!
MySQL之知识点(七)
Size_t 是无符号的