【操作系统】聊聊进程、线程、协程

news2024/11/19 19:39:53

进程内部有那些数据
为什么创建进程的成本高

进程和线程

进程是资源分配的基本单位,而线程是程序执行的基本单位,一个是从资源分配的角度看,另一个是执行角度。

那么进程和程序的区别是什么?
程序,一段代码,一组指令的有序集合。
进程:程序的一次动态运行,通过进程控制块唯一的标识这个进程。
进程:动态,有资源,有唯一标识,有并发性;
程序:静 态,无资源,无唯一标识,无并发性。
在这里插入图片描述
进程是操作系统从安全角度出发进行设计的隔离单位,但是进程在使用的时候,unix是通过fork,先clone,然后在使用,这个设计其实不是很优雅。

线程的出现本质是为了解决同一个软件内会有多个任务的需求,这些任务在相同的地址空间,可以相关操作资源。

协程与goroutine

进程和线程其实对于大多数非高性能服务来说,其实是没问题,但是目前主流的互联网应用基本都是高性能网络服务。

正常情况下的线程模式
在这里插入图片描述
大多数的请求都是因为在存储这部分被阻塞,其中包含如下

  • 系统调用机制的开销
  • 数据多次拷贝 内核态到用户态
  • 线程的空间和时间成本。

而为了提升网络服务器的吞吐能力,目前使用的是epoll,基本就是通过IO多路复用机制实现,少等待,统一的一个线程查询谁处理完,然后去通知处理。而本质是通过减少了线程。系统调用和内存拷贝并没有减少。

线程的成本
时间成本

  • 切换本身的开销,寄存器保存和恢复的成本
  • 调度开销,
  • 同步与互斥成本

空间成本

  • 执行体的执行状态
  • TLS(线程局部存储)
  • 执行体的堆栈

所以综上所属,协程解决的问题是

  • 回归到同步IO的编程模式
  • 降低执行体的空间和时间成本

协程的本质就是用户态下的线程。
Go语言中goroutine。

  • 堆栈自动增长
  • 没有线程局部存储
  • 同步、互斥和通信
  • 提供了重要的系统调用的包装

状态

进程状态

  • 创建
  • 就绪
  • 运行
  • 阻塞

其实创建、就绪、运行比较好理解,阻塞比较难理解,
阻塞其实就是当进程需要等待网络IO或者本地IO的时候,需要等待结果,只能一直等待。
在这里插入图片描述
在这里插入图片描述

小结

本篇主要介绍了进程、线程、协程,以及进程的状态,其实和线程也是通用的。

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

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

相关文章

Linux 6.6 初步支持AMD 新一代 Zen 5 处理器

AMD 下一代 Zen 5 CPU 现已开始为 Linux 6.6 支持提交相关代码,最新补丁包括提供温度监控和 EDAC 报告等。 最新的 Linux 6.6 代码中已经加入了包括支持硬件监视器温度监控和 EDAC 报告的补丁。此外,新版本还加入了 x86 / misc 补丁,Phoronix…

9.11C高级day4

实现一个对数组求和的函数,数组通过实参传递给函数 sum0 function add() {for i in $*  #$*接收传来的所有参数do((sumi))doneecho $sum }#定义一个数组 arr(1 2 3 4 5 7 9)#向函数传参 add ${arr[*]}写一个函数,输出当前用户的uid和gid,并…

shell中分支语句,循环语句,函数

实现对一个数组求和的函数,将数组作为实参传给函数 #!/bin/bash sum() {for i in $do((sumi))doneecho $sum} read -p "请输入一组数字: " -a arr sum ${arr[*]}2 调用函数,输出当前用户的uid gid 并使用变量接收结果 #!/bin/bashget() {uid…

R语言发送邮件丨blastula包使用教程

R语言自动发送邮件 今天分享一个小技巧,用R语言脚本实现STMP邮件自动发送功能。 生信分析实际操作过程中,可能会偶尔会遇到耗时比较久的计算,比如基因组上游分析GATK标准流程往往耗时几天时间。 使用R语言自动发送邮件,在关键节点…

【性能测试】Jmeter —— jmeter计数器

jmeter计数器 如果需要引用的数据量较大,且要求不能重复或者需要递增,那么可以使用计数器来实现 如:新增功能,要求名称不能重复 1,新增计数器 计数器:允许用户创建一个在线程组之内都可以被引用的计数器…

LeGo-LOAM 源码解析

文章目录 0、整体框架1、imageProjection —— 点云分割0. main()1. cloudHandler()2. copyPointCloud()3. findStartEndAngle()4. projectPointCloud()5. groundRemoval()6. cloudSegmentation()7. labelComponents()8. publishCloud()9. resetParameters() 2、featureAssocia…

宠物互联网医院|宠物互联网医院掌上宠物的健康助手

宠物互联网医院依托于互联网技术,将宠物健康管理与现代科技相结合,为宠物主人们提供了全方位、便捷的养宠服务。通过智能手机APP,宠物主人不仅能够快速轻松地了解自己宠物的健康状况,还能够与兽医进行实时的在线咨询、预约就诊。不…

迷你无人车 Navigation 导航(3)

迷你无人车 Navigation 导航&#xff08;3&#xff09; 自己实现了对于迷你无人车关节的控制&#xff0c;由于原本的关节布置仅支持阿克曼转向&#xff0c;因此先进行阿克曼转向的控制 修改 URDF 文件 添加 transmission 标签&#xff0c;定义关节的驱动 <transmission …

MySQL Oracle区别

由于SQL Server不常用&#xff0c;所以这里只针对MySQL数据库和Oracle数据库的区别 (1) 对事务的提交 MySQL默认是自动提交&#xff0c;而Oracle默认不自动提交&#xff0c;需要用户手动提交&#xff0c;需要在写commit;指令或者点击commit按钮 (2) 分页查询 MySQL是直接在SQL语…

使用鳄鱼指标和ADX开立空头的条件,3秒讲清楚

使用鳄鱼指标和ADX开立空头的条件其实很简单&#xff0c;anzo capital昂首资本3秒钟讲清楚。 首先&#xff0c;市场行情需呈水平状态。再者&#xff0c;均线体系开始向上发散&#xff0c;给出明确的信号。最后&#xff0c;ADX确认该信号&#xff0c;要求指数上涨20%以上&#…

Weblogic(CVE-2017-10271)与 Struts2(s2-045) 反序列化漏洞复现

文章目录 Java 反序列化漏洞复现weblogic环境搭建漏洞复现 Struts2(s2-045)环境搭建漏洞复现**漏洞利用** Java 反序列化漏洞复现 weblogic Weblogic < 10.3.6 ‘wls-wsat’ XMLDecoder 反序列化漏洞&#xff08;CVE-2017-10271&#xff09; ​ Weblogic的WLS Security组…

深度学习模型复杂度分析大杂烩

深度学习模型复杂度分析大杂烩 时间复杂度和空间复杂度是衡量一个算法的两个重要指标,用于表示算法的最差状态所需的时间增长量和所需辅助空间. 在深度学习神经网络模型中我们也通过&#xff1a; 计算量/FLOPS&#xff08;时间复杂度&#xff09;即模型的运算次数 访存量/By…

C++设计模式_04_Strategy 策略模式

接上篇&#xff0c;本篇将会介绍C设计模式中的Strategy 策略模式&#xff0c;和上篇模板方法Template Method一样&#xff0c;仍属于“组件协作”模式&#xff0c;它与Template Method有着异曲同工之妙。 文章目录 1. 动机&#xff08; Motivation&#xff09;2. 代码演示Stra…

2023-9-11 拆分-Nim游戏

题目链接&#xff1a;拆分-Nim游戏 #include <iostream> #include <cstring> #include <algorithm> #include <unordered_set>using namespace std;const int N 110;int f[N];int sg(int x) {if(f[x] ! -1) return f[x];unordered_set<int> S;f…

pip和conda的环境管理,二者到底应该如何使用

关于pip与conda是否能混用的问题&#xff0c;Anaconda官方早就给出了回答 先说结论&#xff0c;如果conda和pip在相同环境下掺杂使用&#xff0c;尤其是频繁使用这两个工具进行包的安装&#xff0c;可能会导致环境状态混乱 就像其他包管理器一样&#xff0c;大部分这些问题均…

Python开发手册 — 有勇气的牛排

前言 一、编程规约 二、异常日志 三、单元测试 四、安全规约 4.1 【强制】用户页面/功能进行权限校验 隶属于用户个人的页面或者功能必须进行权限控制校验。 说明&#xff1a;防止没有做水平校验就可随意访问、修改、删除别人的数据&#xff0c;比如查看那他人的私信内容…

浅析Open vSwitch数据结构:哈希表hmap/smap/shash

文章目录 概述hmaphmap数据结构初始化hmap插入节点扩展hmap空间resize函数 删除节点遍历所有节点辅助函数hmap_first辅助函数hmap_next smapsmap数据结构插入节点删除节点查找节点遍历所有节点 shashshash数据结构插入节点删除节点查找节点遍历所有节点 概述 在OVS软件中&…

卡尔曼滤波公式推导(总结)

假设 小车在t时刻的初始状态可以用Pt&#xff08;当前位置&#xff09;&#xff0c;Vt&#xff08;当前速度&#xff09;&#xff0c;Ut表示加速度&#xff1a; 预测&#xff1a; 利用上一个时刻的旧状态和系统的动量模型&#xff08;如加速度&#xff0c;速度等&#xff09;…

Android逆向——脱壳解析

“壳”是一种对程序进行加密的程序&#xff0c;“壳”形象地表现了这个功能。我们可以把被加壳的程序当成食物&#xff0c;而加壳程序就是在外面加上一层坚硬的外壳&#xff0c;防止别人去窃取其中的程序。加壳后的程序依然可以被直接运行。在程序运行时壳的代码先运行&#xf…

修改hosts文件无权限解决办法

文章目录 一、问题描述二、解决办法 一、问题描述 当我们在hosts文件中添加内容后----->点击文件右上角X按钮---->点击保存 系统会弹出我们没有权限的问题 二、解决办法 在搜索栏中搜索cmd---->右键命令提示符---->点击以管理员身份运行 输入cd C:\Windows\Sy…