当前位置: 首页 > news >正文

进程和线程和协程区别

目录

一、进程和线程

二、线程上下文切换

三、线程与协程区别


一、进程和线程

线程是可以由调度程序对立管理的最小程序指令集,而进程是程序运行的实例。

大多情况下,线程是进程的组成部分,一个进程中可以存在多个线程,这些线程并发执行并共享进程的内存等资源。进程之间相互独立,不同进程具有不同的内存地址空间、代表程序运行的机器码、进程状态、操作系统资源描述符等。

操作系统调度到CPU中执行的最小单位是线程

二、线程上下文切换

为了平衡每个线程能够被CPU处理的时间并最大化利用CPU资源,操作系统需要在适当的时间通过定时器中断、I/O设备中断、系统调用时执行上下文切换

当发生线程上下文切换时,需要从操作系统用户态转移到内核态,记录上一个线程的重要寄存器值、进程状态等信息,这些信息存储在操作系统线程控制块中。当切换到下一个要执行的线程时,需要加载重要的CPU寄存器值,并从内核态转移到操作系统用户态。如果线程在上下文切换时属于不同的进程,那么需要更新额外的状态信息及内存地址空间,同时将新的页表导入内存。

三、线程与协程区别

  • 调度方式:go 的协程是通过runtime 调度的,它属于某一个线程,它和线程的关系属于M:N。GO语言调度器可以将多个协程调度到一个线程中,一个协程也可以切换到多个线程中执行

  • 上下文切换速度:协程切换不用经过系统用户态和内核态切换,协程切换只需要保留极少的状态和寄存器变量值(SP/BP/PC),而线程切换会保留额外的寄存器变量值(例如浮点寄存器),线程切换的速度大约是1~2微秒,协程切换的速度为0.2微秒

  • 调度策略:线程的调度是抢占式的,而协程不会被轻易抢占

  • 栈的大小:线程的栈运行时不能修改,协程栈动态地进行扩容,线程栈默认是2MB, go 协程栈默认2KB

http://www.lryc.cn/news/263533.html

相关文章:

  • 银行测试:第三方支付平台业务流,功能/性能/安全测试方法
  • 神经网络可以计算任何函数的可视化证明
  • SQL进阶理论篇(十三):数据库的查询优化器是什么?
  • 视觉SLAM中的相机分类及用途
  • Gin之GORM多表关联查询(多对多;自定义预加载SQL)
  • linux 调试工具 GDB 使用
  • qt程序在Linux下打包的一般流程
  • 华为鸿蒙应用--欢迎页SplashPage+倒计时跳过(自适应手机和平板)-ArkTs
  • spring MVC概述和土门案例(无配置文件开发)
  • 持续集成交付CICD:K8S 通过模板文件自动化完成前端项目应用发布
  • 【TB作品】51单片机 实物+仿真-电子拔河游戏_亚博 BST-M51
  • MyBatis ${}和#{}区别
  • 大型语言模型:RoBERTa — 一种稳健优化的 BERT 方法
  • webpack知识点总结(基础应用篇)
  • 监控k8s controller和scheduler,创建serviceMonitor以及Rules
  • 支持向量机 支持向量机概述
  • http -- 跨域问题详解(浏览器)
  • Java对接腾讯多人音视频房间回调接口示例
  • vp与vs联合开发-通过FrameGrabber连接相机
  • 音视频直播核心技术介绍
  • JNDI注入Log4jFastJson白盒审计不回显处理
  • FPGA实现腐蚀和膨胀算法verilog设计及仿真 加报告
  • 核和值域的关系:什么是矩阵的秩?
  • 【MyBatis Plus】Service Mapper内置接口讲解
  • 制作一个简单 的maven plugin
  • 基于linux系统的Tomcat+Mysql+Jdk环境搭建(三)centos7 安装Tomcat
  • Ubuntu环境下SomeIP/CommonAPI环境搭建详细步骤
  • maven 项目导入异常问题
  • 在 VMware 虚拟机上安装黑苹果(Hackintosh):免费 macOS ISO 镜像下载及安装教程
  • 国产ToolLLM的课代表---OpenBMB机构(清华NLP)旗下ToolBench的安装部署与运行(附各种填坑说明)