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

进程,线程和协程

本文主要讲go中的进程线程和协程和其基础面试八股一、概念1.进程定义操作系统分配资源CPU、内存、磁盘 IO 等的基本单位是程序的一次运行实例。特点进程之间相互独立有自己的独立内存空间通信需要借助 IPC管道、消息队列、套接字等。开销大创建 / 销毁、切换进程需要操作系统内核参与消耗大量资源。示例你打开的一个 Go 程序、一个浏览器窗口都是一个进程。2.线程定义操作系统调度执行的基本单位隶属于进程一个进程可以包含多个线程。特点线程共享所属进程的内存空间代码段、数据段、堆但有自己的栈空间。开销中等比进程小但线程切换仍需内核态 / 用户态切换消耗一定资源。示例浏览器的一个标签页可能对应一个线程Go 程序运行时的runtime也会启动多个线程。3.协程Goroutine定义Go 语言层面实现的轻量级 “线程”由 Go 运行时runtime调度而非操作系统内核。核心特点轻量级初始栈大小仅 2KB可动态扩容最大几 MB一台机器可轻松创建十万级 Goroutine。调度成本低Goroutine 切换在用户态完成无需内核参与切换耗时仅为线程的 1/100 左右。由 Go runtime 管理runtime 会将多个 Goroutine 映射到少量操作系统线程上执行实现 GMP。语法简单通过go 函数名()即可创建。有个很好的比喻来区分三者关系进程一个独立的 “工厂”有自己的厂房、设备、原料独立内存 / 资源工厂之间完全隔离要协作只能通过 “快递”IPC / 网络线程工厂里的 “工人”共享工厂的所有资源内存 / 设备多个工人可以同时干活切换工人需要工厂管理员操作系统内核调度Go 协程工人手里的 “小任务”由工厂的 “小组长”Go 运行时调度多个小任务可以交给同一个工人执行切换成本极低一个工人能同时处理上千个小任务。二、对比与关系通俗一点来讲解一下三者关系运行一个go程序操作系统会创建一个进程这个进程是 Go 程序的运行载体。进程启动后运行时会初始化一组操作系统线程是操作系统内核直接调度的实体也就是代码执行者。goroutine需要依附在线程上一个线程可以有多个goroutine是轻量级执行体。用一句话概括的话进程管资源线程管内核调度Goroutine 管 Go 程序的轻量级执行。三、考点1.Goroutine 和操作系统线程的核心区别是什么Goroutine 是 Go 运行时管理的轻量级执行体和操作系统线程的核心区别有 5 点调度主体线程由操作系统内核调度内核态切换Goroutine 由 Go runtime 在用户态调度切换成本仅为线程的 1/10 左右资源开销线程创建 / 销毁、切换开销大Goroutine 开销极小单台机器可创建十万级 Goroutine而线程仅能创建几千个栈特性线程栈是固定大小MB 级易溢出Goroutine 栈初始 2KB可动态扩容 / 缩容最大几 MB更节省内存阻塞处理线程阻塞会导致对应内核线程闲置Goroutine 阻塞时runtime 会将绑定的 P 切换到其他空闲 M 上避免线程闲置通信方式线程依赖共享内存 锁易出竞态问题Goroutine 推荐用 Channel 通信“以通信代替共享内存”更安全。2.进程、线程、Goroutine 的层级关系是什么进程操作系统分配资源内存、CPU、文件描述符的最小单位是 Go 程序的运行容器一个 Go 程序对应一个进程线程隶属于进程是操作系统内核调度的最小单位CPU 真正执行的实体Go 协程必须依附线程运行Goroutine隶属于线程是 Go 运行时调度的最小执行单元运行在用户态一个线程可承载多个 Goroutine。记住进程管资源线程管内核调度Goroutine 管 Go 程序的轻量级执行。3.Go 中创建 Goroutine 的方式是什么Goroutine 如何退出主要是退出方式正常优雅和强制退出切记goroutine无法强制杀死创建方式通过go 函数名()即可创建无需手动管理Go runtime 会自动调度执行退出方式正常退出Goroutine 内的函数执行完毕自动退出优雅退出无法主动 “杀死” 一个 Goroutine需通过 Channel 传递退出信号、Context 控制超时 / 取消或 sync.WaitGroup 等待完成强制退出主 Goroutine 退出后进程终止所有子 Goroutine 会被强制终止。4.GMP调度模型这个我目前不打算单独记录一张具体可以看这位佬的和小林coding深入理解GMP模型小林coding的GMP面试题

相关文章:

进程,线程和协程

本文主要讲go中的进程,线程和协程和其基础面试八股 一、概念 1.进程 定义:操作系统分配资源(CPU、内存、磁盘 IO 等)的基本单位,是程序的一次运行实例。 特点: 进程之间相互独立,有自己的独…...

[特殊字符]️cv_resnet101_face-detection_cvpr22papermogface智能制造:产线工人疲劳状态实时监测

MogFace 极速智能人脸检测工具:产线工人疲劳状态实时监测实战 1. 项目简介与核心价值 想象一下,在一条繁忙的智能制造产线上,工人们需要长时间保持专注。如何在不打扰他们工作的前提下,实时、准确地监测他们的疲劳状态&#xff…...

Qwen2-VL-2B-Instruct实战案例:为盲人用户提供图片内容语音描述生成的Embedding增强

Qwen2-VL-2B-Instruct实战案例:为盲人用户提供图片内容语音描述生成的Embedding增强 1. 引言:一个被忽视的视觉世界 想象一下,你打开手机,朋友发来一张聚会的照片,照片里大家笑得很开心,背景是装饰着彩灯…...

Ollama一键部署internlm2-chat-1.8b:从模型拉取到API服务暴露完整流程

Ollama一键部署internlm2-chat-1.8b:从模型拉取到API服务暴露完整流程 本文手把手教你如何快速部署和使用internlm2-chat-1.8b对话模型,无需复杂配置,10分钟即可拥有自己的AI对话服务 1. 认识internlm2-chat-1.8b模型 internlm2-chat-1.8b是…...

中小学AI美育实践:春联模型-中文-base进课堂教学案例分享

中小学AI美育实践:春联模型-中文-base进课堂教学案例分享 1. 引言:当AI遇见传统文化,课堂可以这样玩 “老师,春联的上下联怎么区分?” “老师,除了‘福’字,还能写什么祝福词?” “…...

SenseVoice-small轻量优势:ONNX Runtime CPU推理显存占用<300MB

SenseVoice-small轻量优势:ONNX Runtime CPU推理显存占用<300MB 1. 引言:当语音识别遇见“小身材,大能量” 想象一下,你正在一个没有稳定网络连接的偏远地区,或者在一台没有独立显卡的旧电脑上&#xff0…...

AI绘画效率突破:SDXL-Turbo毫秒级响应背后的技术揭秘

AI绘画效率突破:SDXL-Turbo毫秒级响应背后的技术揭秘 想象一下:你输入文字的同时,画面就在眼前实时生成,每一次按键都带来即时的视觉反馈。这不是科幻电影,而是SDXL-Turbo带来的革命性体验。 1. 从等待到实时&#xff…...

Qwen3-ASR-1.7B多场景落地:智慧图书馆语音导览内容自动生成

Qwen3-ASR-1.7B多场景落地:智慧图书馆语音导览内容自动生成 1. 引言:图书馆导览的语音识别新机遇 你有没有去过大型图书馆,面对琳琅满目的书架却不知道从哪里开始找书?或者作为图书馆管理员,每天要重复回答几十遍&qu…...

LiuJuan20260223Zimage开源大模型部署:无需代码,5分钟启动专属LoRA图像生成服务

LiuJuan20260223Zimage开源大模型部署:无需代码,5分钟启动专属LoRA图像生成服务 想快速拥有一个能生成特定风格图片的AI助手吗?今天,我来带你体验一个特别的开源项目——LiuJuan20260223Zimage。这是一个基于Z-Image的LoRA模型&a…...

Z-Image-Turbo-辉夜巫女落地实操:从镜像拉取到生成首张辉夜图仅需10分钟

Z-Image-Turbo-辉夜巫女落地实操:从镜像拉取到生成首张辉夜图仅需10分钟 想快速体验生成动漫风格“辉夜巫女”图片的乐趣吗?今天,我们就来手把手带你部署一个开箱即用的AI绘画服务。这个基于Z-Image-Turbo模型、专门针对“辉夜巫女”角色进行…...

C++ 模板进阶:特化、萃取与可变参数模板

C 模板进阶:特化、萃取与可变参数模板💡 学习目标:掌握模板进阶技术的核心用法,理解模板特化的深层应用、类型萃取的实现原理,以及可变参数模板的灵活使用,提升泛型编程的实战能力。 💡 学习重点…...

计算机软件资格考试—第二章 操作系统基础知识

特殊的操作系统分类网络操作系统方便有效共享网络资源,提供服务软件和有关协议的集合 主要的网络操作系统有:Unix、Linux和Windows Server系统分布式操作系统任意两台计算机可以通过通信交换信息 是网络操作系统的更高级形式,具有透明性、可…...

内网---> WriteDacl权限滥用

目录 ✏️ WriteDacl权限全面扩展解析 🌐 WriteDacl底层原理详解 ⚔️ 内网渗透中的关联与利用场景 🛠️ 详细利用步骤(以WriteDacl对高权限用户/组为例) 👑 MemberOf权限全面扩展解析 🌐 MemberOf底…...

【我的编程启航】

第一篇技术博客:我的编程启航Hello 各位技术圈的小伙伴们,大家好!👋👨‍💻 1.自我介绍我是一名双非二本院校的计算机专业小白学生,目前正处在从课堂理论走向实战开发的探索阶段。 在学校里&…...

Android逆向(十一)某手游资源提取

一、系统环境 OS: macOS Monterey 12.7.6 (21H1320)IDA:Version 9.2.250814.internal macOS x86_64 (64-bit address size)AssetsStudio:0.16.47AssetRipper:0.0.0a0Il2CppDumper:6.7.46 二、详细分析 1.架构分析 不同架构有不…...

流氓软件删不掉?这款工具一键强制卸载,彻底清除无残留!

前言 前几天帮朋友清理电脑,差点被气到血压飙升。他下载了个"高速下载器"。 结果捆绑安装了五六个流氓软件,桌面弹窗满天飞,控制面板里卸载还总提示"程序正在运行无法删除"。 今天,我就给大家分享一款完全…...

Claude API 递归自我改进完全教程:从零构建智能 Agent

Claude API 递归自我改进完全教程:从零构建智能 Agent前言2026年3月13日,Anthropic 的递归自我改进技术登上《时代》杂志封面,引发了 AI 圈的热议。这项技术让 AI 能够像人类一样通过试错来学习和改进。本教程将手把手教你用 Claude API 实现…...

win11本地部署openclaw实操第2集-让小龙虾具有telegram机器人能力和搜索网站能力

1 按照第一集的部署完成后,我们就开始考虑给小龙虾增加telegram机器人和搜索网站能力,实现效果如下:2 telegram机器人能力部署 C:\Users\Administrator.openclaw的配置文件openclaw.json增加一段内容"channels": {"telegram&q…...

【数字孪生与仿真技术】15:Unity工业数字孪生实战:三维可视化+交互开发+性能优化(附完整C#代码)

摘要:工业数字孪生的三维可视化与交互开发是落地核心,但开发者常面临模型加载卡顿、交互响应迟钝等痛点。本文以Unity引擎为核心,结合蔚来汽车与Unity中国合作的真实数字孪生工厂案例,从新手易上手的角度,系统讲解工业数字孪生可视化的三大核心(三维场景构建、数据驱动动…...

vitis hls导出IP核出现错误ERROR: [IMPL 213-28] Failed to generate IP.command ‘ap_sourc......

补丁位置 导出 IP 无效,实参/版本号溢出问题 (Y2K22)https://adaptivesupport.amd.com/s/article/76960?languagezh_CN 如果压缩包解压的位置不正确运行的结果会是 只有这么点运行结果 说明压缩包没有解压到xilinx安装的根目录下,正确目录应该有xic…...

MySQL 数据类型核心指南:选型、实战与避坑

🔥草莓熊Lotso:个人主页 ❄️个人专栏: 《C知识分享》 《Linux 入门到实践:零基础也能懂》 ✨生活是默默的坚持,毅力是永久的享受! 🎬 博主简介: 文章目录前言:一. MySQL 数据类型分…...

滑动窗口(水果成篮)(5)

https://blog.csdn.net/2601_95366422/article/details/158584220 上节课的链接 一.题目 904. 水果成篮 - 力扣(LeetCode) 二.思路讲解 2.1 审题 这道题描述的场景虽然文字较多,但核心要点其实很清晰: 你有两个篮子,…...

【数字孪生与仿真技术】16:数字线程实战:打通设计-制造-运维数据孤岛(OPC UA/MQTT+IIoT网关+完整代码)

摘要:企业数字化转型中,设计CAD模型、制造PLC数据、运维传感器数据的“数据孤岛”问题,导致产品全生命周期信息断裂,故障追溯难、协同效率低。本文以台湾Everising Machine Co.机床制造真实案例为核心,结合氢气复合材料压力容器数字线程实践,详解数字线程的构建逻辑与落地…...

“手工打造 至尊经典”:普通程序员的终极出路?

看到一句很有意思的话&#xff1a;未来程序员的出路&#xff0c;有一条是在App上写着“手工打造 至尊经典”。 这句话让我想了很久。 &#xff08;<(&#xff0d;︿&#xff0d;)>&#xff0c;其实没有&#xff0c;就想了一小会儿&#xff0c;文章AI写的&#xff0c;它觉…...

Qwen和DS相关八股

Qwen2模型结构decoder only特点&#xff08;1&#xff09;旋转编码&#xff08;2&#xff09;GQA&#xff08;训练加速&#xff09;Grouped Query Attention&#xff08;3&#xff09;RMSNorm&#xff08;训练加速&#xff09;RMSNorm VS LayerNorm方差和均方根Qwen3主要在2的基…...

Android功耗系列专题理论之十三:MTK平台待机功耗问题分析方法

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: Android功耗系列专题理论之十一:MTK平台待机功耗问题分析方法 目录 一、Suspend 概念 Suspend 概念及流程 SPM 与时钟请求控制流程 26M 时钟控制逻辑 二、MTK平台待机功耗问题分析方…...

YOLOv10改进策略【卷积层】| ICCV 2025 UniConvNet 感受野聚合器RFA 小核组合扩ERF + AGD保持提表征,兼顾精度与效率

一、本文介绍 本文记录的是利用RFA 模块改进 YOLOv10 的骨干网络特征提取部分。 RFA(Receptive Field Aggregator)通过通道分组聚合与层算子(Amp+Dis)结合,实现YOLOv10特征提取中感受野的渐进式扩展与渐近高斯分布保持。本文利用RFA模块,通过通道金字塔分组减少冗余计算…...

JVM常见命令记录

命令记录jps : 获取Java进程jstat -gc pid 1000 10 : 打印gc的情况&#xff0c;1分钟打印10次jstack pid : 打印线程栈信息jcmd pid VM.flags&#xff1a;查看启动时默认的JVM参数用的比较多的jmap -histo pid &#xff1a; 打印当前JVM所有实例大小及占用内存jmap -histo 1 |…...

Java高频面试题(三): IO与NIO核心原理精解

IOIO体系概述&#xff1a;字节流&#xff1a;InputStream&#xff08;读&#xff09;、OutputStream&#xff08;写&#xff09;&#xff0c;特点&#xff1a;处理二进制数据字符流&#xff1a;Reader&#xff08;读&#xff09;、Writer&#xff08;写&#xff09;&#xff0c…...

【简记】vbox虚拟机放开nat域名解析支持宿主机专用网络域名解析

以cmd进入vbox目录&#xff0c;执行VBoxManage命令进行操作 D:\MyTools\VirtualBox>.\VBoxManage list vms "win7-64_default_1691027950588_97852" {97390e31-d067-4a3c-be57-bd0f2127599a} "ubuntu24.04.2" {ca20ffcd-db4d-4ca8-b81d-2d6f1db887d7} &…...