进程、线程、进程池、进程三态、同步、异步、并发、并行、串行

news2024/10/5 9:55:36

进程、线程、进程池、进程三态、同步、异步、并发、并行、串行

一.进程, 线程

1.🌵进程

🍹什么是进程?

开发写的代码我们称为程序,那么将开发的代码运行起来。我们称为进程。

明白点: 当我们运行一个程序,那么我们将运行的程序叫进程。

👉精简重点👈

进程是申请一块内存空间,将数据放到内存空间中去, 是申请数据的过程
是最小的资源管理单元

  • 进程是线程的容器

🍹程序与进程的区别

  • 程序是数据和指令的集合, 是一个静态的概念, 就是一堆代码, 可以长时间的保存在系统中
  • 进程是程序运行的过程, 是一个动态的概念, 进程存在着生命周期, 也就是说进程会随着程序的终止而销毁, 不会永久存在系统中

🍹进程之间交互

  • 进程之间通过 TCP/IP 端口实现

2.🌵线程

🍹什么是线程

  • 线程是操作系统能够进行运算调度的最小单位。
  • 它被包含在进程之中,是进程中的实际运作单位。
  • 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

👉精简重点👈

是进程的一条流水线, 只用来执行程序,而不涉及到申请资源, 是程序的实际执行者
最小的执行单元

🍹线程之间交互

多个线程 共享同一块内存 ,通过共享的内存空间来进行交互

3.🌵进程与线程的关系

🍹例子

我们打开一个聊天软件,这就是开启了一个进程
当我们在软件里面打开一些功能,比如空间, 扫一扫, 设置…,这些操作就是线程
所以可以说 “进程” 包含 “线程”, “线程” 是 “进程” 的子集

🍹进程是线程的容器

工厂流水线例子
lm6c2zi3.png

lm6c3463.png

4.🌵总结

  • 进程:指在系统中正在运行的一个应用程序;程序一旦运行就是进程; 进程——资源分配的最小单位。

  • 线程:系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元执行流。 线程——程序执行的最小单位。

  • 进程要分配一大部分的内存,而线程只需要分配一部分栈就可以了.

  • 一个程序至少有一个进程,一个进程至少有一个线程.

  • 一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行.

二.并行, 并发, 串行

并发: 多个任务看起来是同时进行, 这是一种假并行

单核下使用多道技术实现

并发: 多个任务看起来是同时进行, 这是一种假并行

并行: 多个任务同时进行

并行必须有多核才能实现,否则只能实现并发(伪并行)

并行: 多个任务同时进行

串行: 一个程序完完整整的运行完,再运行下一个进程

串行: 一个程序完完整整的运行完,再运行下一个进程

三.任务运行的三种状态

进程在运行的过程中不断地改变其运行状态
通常一个运行的进程必须具有三种状态:就绪态, 运行态, 阻塞态

1.就绪态 (Ready)

  • 当进程已分配到除CPU以外的所有必要的资源后,只要再获得CPU, 便可执行程序, 进程这时的状态就称为就绪态,
  • 在一个系统中处于就绪态的进程可能有多个 , 通常将他们排成一个队列, 这就叫 就绪队列

2.运行态 (Running)

  • 当进程已经获得CPU操作权限, 其程序正在运行, 着就叫做运行态
  • 在单核操作系统中, 只有一个进程处于运行态 , 多核操作系统有多个进程处于运行态

3.阻塞态 (Blocked)(sleep)

  • 正在执行的进程, 由于等待某个事件而无法执行时, 便被操作系统剥夺了cpu的操作时间, 这是就是阻塞态

  • 引起阻塞的 原因 多种, 例如: 等待I/O操作, 更高优先级的任务抢走了CPU权限等.

4.进程三种状态 间的转换

一个进程在运行期间, 会不断地在一种状态切换到另一只种状态
他可以是多次处于就绪态和运行态, 也可以多次处于阻塞态, 下图是三种状态的转换图

进程三种状态 间的转换

就绪态➠➠运行态

处于就绪态的进程, 当进程调度程序为之分配了CPU的时间片后, 该进程就会由就绪态转变成运行态

运行态➠➠就绪态

处于运行态的进程在运行过程中, 因为分配的时间片用完了, 于是失去了CPU的使用权限, 运行态就会重新转为就绪态

运行态➠➠阻塞态

正在运行的进程由于遇到I/O操作或被更高优先级的任务抢走CPU使用权限而无法继续执行, 便从运行态转为阻塞态

阻塞态➠➠就绪态

处于阻塞态的进程, 若其等待的事情已经处理完毕, 于是进程从阻塞态转为就绪态

四.任务提交的两种方式

1.同步

  • 同步是指发送方发送数据后, 等接收方发回响应后才发下一个数据报的通讯方式
  • 同步是指 两个程序的运行是相关的 , 其中一个线程在阻塞需要等待状态, 那另一个线程才运行

2.异步

  • 异步是指发送方发出数据后, 不等接收方发回响应, 接着就发下个数据报的通讯方式
  • 异步是指 两个线程毫无相关 , 自己运行自己的

3.例子

同步

  1. 你叫我去吃饭, 我听到了就立即和你去吃饭, 如果没有听到, 你就不停的叫, 直到我告诉你听到了, 才一起去吃饭
  2. 打电话好比同步, 两边是同时进行不能再打给另一个人

异步

  1. 你叫我去吃饭, 然后自己去吃饭了, 我得到消息后可能立即走, 也可能过会儿走
  2. 发消息好比异步, 和一个人发完消息就可能和另一个人发消息

五.进程池

1.什么是进程池?

  • 👉 进程池是资源进程, 管理进程组成的技术的应用.

2.为什么要有进程池?

忙时会有成千上万的任务需要被执行,闲时可能只有零星任务。

那么在成千上万个任务需要被执行的时候,我们就需要去创建成千上万个进程么?

首先,创建进程需要消耗时间,销毁进程也需要消耗时间。

第二即便开启了成千上万的进程,操作系统也不能让他们同时执行,这样反而会影响程序的效率。

因此我们不能无限制的根据任务去开启或者结束进程。那么我们要怎么做呢?

3.进程池的概念

定义一个池子,在里面放上固定数量的进程,有需求来了,就拿一个池中的进程来处理任务

等到处理完毕,进程并不关闭,而是将进程再放回进程池中继续等待任务

如果有很多任务需要执行,池中的进程数量不够,任务就要等待之前的进程执行任务完毕归来,拿到空闲进程才能继续执行。

重点来了 ,也就是说, 进池中进程的数量是固定的,那么同一时间最多有固定数量的进程在运行

这样不会增加操作系统的调度难度,还节省了开关进程的时间,也一定程度上能够实现 并发 效果。

4.资源进程

  • 预先创建好的空闲进程 ,管理进程(好比池子🏊)会把工作分发到空闲进程来处理。

5.管理进程🏊

  • 管理进程 负责创建资源进程,把工作交给空闲资源进程处理,回收已经处理完工作的资源进程。

  • 资源进程与管理进程的交互

管理进程如何有效的管理资源进程,分配任务给资源进程?
通过IPC,信号,信号量,消息队列,管道等进行交互。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/977485.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

反序列化漏洞及漏洞复现

文章目录 渗透测试漏洞原理不安全的反序列化1. 序列化与反序列化1.1 引例1.2 序列化实例1.2.1 定义一个类1.2.2 创建对象1.2.3 反序列化1.2.4 对象注入 2. 漏洞何在2.1 漏洞触发 3. 反序列化漏洞攻防3.1 PHP反序列化实例3.1.1 漏洞利用脚本3.1.2 漏洞利用3.1.3 获取GetShell 3.…

folium中RegularPolygonMarker的rotation怎么理解

背景 我们在使用 folium 库创建交互式地图的时候,如果我们使用 RegularPolygonMarker 对象,则会使用到 rotation这个参数,这个rotation的基准是什么?方向是顺时针还是逆时针?今天来聊聊。 创建几个 RegularPolygonMa…

策略路由典型配置:通过流策略实现策略路由(即重定向到不同的下一跳)

策略路由典型配置:通过流策略实现策略路由(即重定向到不同的下一跳) 1、拓扑图及组网要求 公司用户通过SW2核心交换机连接到外部网络,其中一条是高速链路,网关是192.168.100.2/24,另一条是低俗网络&#…

Python+Appium+Pytest+Allure实战APP自动化测试!

pytest只是单独的一个单元测试框架,要完成app测试自动化需要把pytest和appium进行整合,同时利用allure完成测试报告的产出。 编写常规的线性脚本具体的步骤如下: 1、设计待测试APP的自动化测试用例 2、新建app测试项目 3、配置conftest.py文…

VMware虚拟机安装CentOS6.9设置静态ip

1.设置虚拟网络编辑器 点击编辑–>虚拟网络编辑器 2.更改系统网络适配器选项 这里的子网掩码与网关,与第一步的一致 3.修改虚拟机主机名 vi /etc/sysconfig/networkNETWORKINGyue HOSTNAMEchen4.配置IP映射 vi /etc/hosts192.168.121.138 chen5.配置网卡…

Vue2+Vue3笔记(尚硅谷张天禹老师)day03

声明:只是记录,初心是为了让页面更好看,会有错误,我并不是一个会记录的人,所以有点杂乱无章的感觉,我先花点时间把视频迅速过掉,再来整理这些杂乱无章的内容 脚手架 Vue-cli CLI是Command Line Interface的缩写,直译的…

机器学习练习

原文章添加链接描述

OPENCV+QT环境配置

【qtopencv开发入门:4步搞定opencv环境配置2】https://www.bilibili.com/video/BV1f34y1v7t8?vd_source0aeb782d0b9c2e6b0e0cdea3e2121eba 第一步: 安装QT Qt 5.15 第二步: 安装OPENCV VS2022 Opencv4.5.5 C 配置_愿飞翔的鱼儿的博客…

集成facebook第三方登录facebook_client_token不知道在哪

在应用面板的应用设置中 选择高级 下拉一些,客户端口令这个就是了 再加到string 中

RecyclerView源码解析(三):RecyclerView的缓存机制

RecyclerView源码解析(三):RecyclerView的缓存机制 导言 上两篇文章我们结合LinearLayoutManager对RecyclerView整体是如何绘制的有了大致的了解,不过RecyclerView的重头戏并不是简单显示列表,而是它通过缓存机制实现…

nginx搭建DNS服务器

目录 搭建DNS服务器搭建一个DNS缓存域名服务器主从DNS服务器的工作原理查域里的域名服务器记录记录类型做一个自己的域名数据库,给sc.com提供解析 反向解析的配置文件和数据文件 搭建DNS服务器 主配置文件:/etc/named.conf 次要配置文件:/et…

openGauss学习笔记-61 openGauss 数据库管理-常见主备部署方案

文章目录 openGauss学习笔记-61 openGauss 数据库管理-常见主备部署方案61.1 单中心61.2 同城双中心61.3 两地三中心61.4 两地三中心流式容灾方案 openGauss学习笔记-61 openGauss 数据库管理-常见主备部署方案 61.1 单中心 图 1 单中心部署图 组网特点: 单AZ部署…

【大数据】Flink 详解(七):源码篇 Ⅱ

本系列包含: 【大数据】Flink 详解(一):基础篇【大数据】Flink 详解(二):核心篇 Ⅰ【大数据】Flink 详解(三):核心篇 Ⅱ【大数据】Flink 详解(四…

CocosCreator3.8研究笔记(八)CocosCreator 节点和组件的使用

我们知道,在CocosCreator 节点和组件的修改有两种方法: 属性检查器中的设置脚本中的动态修改 脚本中动态修改,能实现各种各样的游戏逻辑,例如响应玩家输入,删除、修改、销毁节点或组件。 不过想要实现这些游戏逻辑&a…

51单片机简易时钟闹钟八位数码管显示仿真( proteus仿真+程序+原理图+报告+讲解视频)

51单片机简易时钟闹钟八位数码管显示仿真( proteus仿真程序原理图报告讲解视频) 1.主要功能:2.仿真3. 程序代码4. 原理图元器件清单 5. 设计报告6. 设计资料内容清单&&下载链接资料下载链接(可点击): 51单片机…

数据结构插入排序

好久不见,这几天有点事情,都快一个礼拜没有学习,对键盘都要陌生起来了,今天也是刚刚学了一点排序,在这里也给大家更新一个插入排序,后面也会渐渐的把八大排序更新完的,还有就是二叉树&#xff0…

【大数据Hive】hive 加载数据常用方案使用详解

目录 一、前言 二、load 命令使用 2.1 load 概述 2.1.1 load 语法规则 2.1.2 load语法规则重要参数说明 2.2 load 数据加载操作演示 2.2.1 前置准备 2.2.2 加载本地数据 2.2.3 HDFS加载数据 2.2.4 从HDFS加载数据到分区表中并指定分区 2.3 hive3.0 load 命令新特性 …

学习Bootstrap 5的第五天

目录 图像 图像形状 实例 对齐图像 实例 居中图像 实例 响应式图像 实例 Jumbotron 实例 图像 图像形状 .rounded 类可以用于为图像或任何具有边框的元素添加圆角。这个类适用于Bootstrap的所有版本&#xff0c;并且在最新版本中得到了进一步的增强。 实例 <…

【爬虫】7.4. 字体反爬案例分析与爬取实战

字体反爬案例分析与爬取实战 文章目录 字体反爬案例分析与爬取实战1. 案例介绍2. 案例分析3. 爬取 本节来分析一个反爬案例&#xff0c;该案例将真实的数据隐藏到字体文件里&#xff0c;即使我们获取了页面源代码&#xff0c;也无法直接提取数据的真实值。 1. 案例介绍 案例网…

WPF调用Grpc

一、服务端 1、创建proto文件&#xff1a; Protos文件夹 —>右键添加新建项 —> ASP.Net Core下常规中选择"协议缓冲区文件" 2、proto文件协议&#xff1a; 需要使用空参数和空返回值时&#xff0c;需要使用这个协议文件 import “google/protobuf/empty.pr…