当前位置:网站首页>多线程(一) 进程与线程
多线程(一) 进程与线程
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、进程有独立性。每个进程都有各自的虚拟地址空间,一个进程出现问题,不会影响到其他进程。而同一个进程中的多个线程同用一个内存空间,如果一个线程出现问题,很可能会影响到其他线程,也有可能直接导致整个进程出现问题。
边栏推荐
- Troubleshooting - about clip not found Visual Studio
- 「运维有小邓」用于云应用程序的单点登录解决方案
- This 17-year-old hacker genius cracked the first generation iPhone!
- Disorganized series
- ICML 2022 | meta proposes a robust multi-objective Bayesian optimization method to effectively deal with input noise
- Is it safe to open an account online? What is the general interest rate of securities financing?
- LeetCode每日一题:合并两个有序数组
- RSE2020/云检测:基于弱监督深度学习的高分辨率遥感图像精确云检测
- Count the running time of PHP program and set the maximum running time of PHP
- Interpretation: how to deal with the current security problems faced by the Internet of things?
猜你喜欢
「运维有小邓」用于云应用程序的单点登录解决方案
Binder开辟线程数过多导致主线程ANR异常
Abnormal recovery of virtual machine Oracle -- Xi Fenfei
"Xiaodeng in operation and maintenance" is a single sign on solution for cloud applications
提高应用程序性能的7个DevOps实践
解决“双击pdf文件,弹出”请安装evernote程序
ELK日志分析系统
Elk log analysis system
7 pratiques devops pour améliorer la performance des applications
Knowledge points of MySQL (6)
随机推荐
ISPRS2020/云检测:Transferring deep learning models for cloud detection between Landsat-8 and Proba-V
Cartoon: how to multiply large integers? (next)
Cartoon: looking for the best time to buy and sell stocks
Thesis reading_ Medical NLP model_ EMBERT
神经网络自我认知模型
为什么阳历中平年二月是28天
How to save the trained neural network model (pytorch version)
"Xiaodeng in operation and maintenance" is a single sign on solution for cloud applications
Ten capabilities that cyber threat analysts should have
Simple query cost estimation
Knowledge points of MySQL (6)
Tkinter window preload
Zabbix
Clickhouse (03) how to install and deploy Clickhouse
flask接口响应中的中文乱码(unicode)处理
提高應用程序性能的7個DevOps實踐
Anaconda中配置PyTorch环境——win10系统(小白包会)
提高应用程序性能的7个DevOps实践
Troubleshooting - about clip not found Visual Studio
Oracle Recovery Tools ----oracle数据库恢复利器