协程到底是什么?看完这个故事明明白白!
神秘使者“久闻Java语言跨越平台框架众多不过二十年功夫就已晋升天下第一编程语言今日一见果然名不虚传呐”“使者先生您过奖了咱们快些走国王陛下已经等候多时了”今日Java帝国朝堂之上迎来了一位神秘的来宾。来到大殿之上只见国王正襟危坐闭目养神不怒自威堂下群臣咸集纷纷侧目。“来者何人”国王一旁的内侍问到。“我乃GoLang帝国使者——Goroutine”使者答道。“GoLang帝国何方番邦小国寡人竟从未听闻”国王闭眼说到。说罢群臣皆笑了起来。“来此所为何事”内侍继续问到。使者回答“我此行特为传道而来”说完国王睁开了眼睛“传道我Java帝国乃天下第一编程帝国只有我们传出去哪有学别人之道”使者不卑不亢说到“Java帝国虽如日中天但却有一处缺陷假以时日必成大患”“哦你倒是说说看如若言语不通即刻轰出殿去。”国王厉声喝到。“敢问陛下Java线程执行到阻塞函数时该当如何”使者问到。一旁的线程大臣见状上前说到“遇到阻塞那自然要被操作系统挂起切换到别的线程”“敢问大人线程切换是否需要成本如果大量线程频繁切换成本又当如何”使者追问到。“你若关心这个问题那就不用阻塞函数通过异步回调来进行”线程大臣答道。使者嘴角上扬微微一笑“好一个异步回调异步回调确实不用阻塞不过它有两宗罪其一割裂了原来的代码业务逻辑其二陷入回调地狱难以维护”“这也不行那也不行你这人还真难伺候”线程大臣有些急了。使者转身面向国王说到“启禀陛下我有一法可让线程遇到阻塞函数后不需切换线程也不用异步回调还可以继续运行下去是高并发开发神技”国王一听来了兴趣“哦还有这种事说来听听”使者拜了一拜说到“线程可以在遇到阻塞的地方后保存执行的上下文转而去执行别处的代码。待阻塞的请求完成后再转而回去继续执行”国王不解问到“什么叫转而去执行别处的代码什么叫回去继续执行这函数执行到一半还能中途退出再回来”“是的没错”使者回答。此话一出朝堂上议论纷纷群臣都露出了鄙夷的笑容。“简直荒谬函数执行从进入到return退出从来都是一气呵成哪有中途执行一半退出再回来接着执行的道理简直闻所未闻”一旁的线程大臣说到。使者继续说到“一气呵成恐怕不是吧线程执行函数中途遇到时间片用完或者遇到I/O阻塞就会被操作系统保存上下文后挂起切换到其他线程。而后等到机会再回过头继续执行不是吗”线程大臣怒斥道“强词夺理你说的这情况是操作系统在调度管理多个线程对咱们的应用层线程来说都是透明的无需关心”使者没有退让却问道“既然操作系统可以调度管理多个线程那为何线程不可以调度管理函数的执行”群臣再次交头接耳议论起来。“陛下此番邦使者妖言惑众微臣建议即刻逐出大殿以正视听”国王应允随即遣人上前。不待侍卫上前使者自行离去边走边说到“可叹堂堂Java帝国却容不下一个新技术”临别相会使者心灰意冷打算离开Java帝国却在半道上被人给拦了下来。“先生请留步我家主人请先生府上相会”使者来到府上原来主人乃当地一富豪乡绅。“先生今日在朝堂之事我已听说在下对先生提到的函数执行过程中可中断和恢复的技术颇有兴趣还请先生不吝赐教”主人说完拜了一拜。“赐教不敢当我此次来Java帝国所传之道名叫协程是一种高并发开发的绝技可无奈贵国国君与大臣皆不识货无功而返可惜啊可惜”使者叹息到。“协程这是何物我只听说过进程和线程却是从未听过协程”使者起身说到“线程是操作系统抽象出来的执行流由操作系统统一调度管理。那在一个线程中同样可以抽象出多个执行流由线程来统一调度管理。这线程之上抽象的执行流就是协程”主人有些不解问到“一个线程怎么会有多个执行流呢”“这便是我今日在朝堂上说的线程执行函数遇到阻塞后可以保存上下文后退出转而执行别处的代码这里就从一个执行流转向了另外的执行流”使者解释到。主人拍案而起“原来是这个意思妙哉妙哉啊不过这线程是操作系统在调度管理那线程里抽象出来的执行流也就是协程该怎么调度管理呢操作系统可以通过时钟中断和系统调用进入内核来剥夺线程的执行权那线程该如何剥夺协程的执行权来实现调度管理呢”“真是个好问题线程的调度由操作系统来管理是抢占式调度。而协程不同协程需要互相配合主动交出执行权这也是协程的名字——协作式程序的来历”“主动交出执行权如何办到”主人追问。“办法有很多比如C帝国有一协程框架名叫libco他通过HOOK关键的系统函数来实现调度器的介入”“那你们Golang是怎么做的也是这样吗”“我们Golang帝国可不一样我们先天设计就是支持协程系统调用都被我们封装好了应用程序调用时遇到需要阻塞的像是文件读写Read/Write、Sleep我们的调度器就能有机会介入去执行调度管理了”使者得意的说到。

相关新闻

KVM虚拟化技术详解:从部署到优化实践

KVM虚拟化技术详解:从部署到优化实践

1. KVM虚拟化技术概述 KVM(Kernel-based Virtual Machine)作为Linux内核原生支持的虚拟化解决方案,已经成为企业级虚拟化环境的重要选择。与传统的Type-2虚拟机监控程序不同,KVM属于Type-1(裸机)虚拟机监控…

2026/7/23 9:42:40 阅读更多 →
Java单元测试实战:Maven集成JUnit与@After生命周期注解详解

Java单元测试实战:Maven集成JUnit与@After生命周期注解详解

1. 项目概述:为什么单元测试是Java开发的“安全带”在Java开发的世界里,尤其是当你使用Maven这样的项目管理工具构建一个稍具规模的项目时,代码的稳定性和可靠性就成了悬在头顶的达摩克利斯之剑。你可能有过这样的经历:修改了一个…

2026/7/23 9:42:40 阅读更多 →
IDA Pro逆向工程实战:定位与修复IDM文件损坏误报弹窗

IDA Pro逆向工程实战:定位与修复IDM文件损坏误报弹窗

1. 项目概述:从弹窗到逆向分析如果你也和我一样,是个喜欢折腾软件、追求极致干净体验的用户,那么对Internet Download Manager(IDM)这款下载神器一定不陌生。它凭借多线程加速和站点抓取能力,几乎是Windows…

2026/7/23 9:42:40 阅读更多 →

最新新闻

10人SolidWorks研发团队共享一台云主机方案如何配置

10人SolidWorks研发团队共享一台云主机方案如何配置

针对 10 人三维研发团队,传统单人工作站模式普遍硬件投入高、算力闲置、图纸分散、协同低效等痛点。采用云飞云共享云桌面服务器方案,从硬件选型、网络搭建、平台部署、终端接入五大维度统筹规划,搭配性能优化、数据安全体系,一站…

2026/7/23 10:14:54 阅读更多 →
场景喂出来的数字人,谁做得更稳、更真、更活?

场景喂出来的数字人,谁做得更稳、更真、更活?

文/纪德编辑/子夜AI什么时候能真正“干活”?今年的世界人工智能大会(WAIC),给出了最直观的答案。大会现场,60台人形机器人第一次以“志愿者”的身份上岗,在展馆里跑导览、答问询。而在去年,它们…

2026/7/23 10:14:54 阅读更多 →
Castor:命令行DLNA投屏工具部署与自动化应用指南

Castor:命令行DLNA投屏工具部署与自动化应用指南

今天介绍一个实用的开源工具——Castor,它能让你直接从命令行终端向电视投屏任意网页视频。这个项目解决了传统投屏方案依赖特定App或平台限制的问题,让你在Linux、macOS或Windows终端中快速将在线视频推送到电视大屏上。Castor的核心优势在于轻量、跨平…

2026/7/23 10:14:54 阅读更多 →
Linux C语言网络编程:TCP校验和计算与Offload机制详解

Linux C语言网络编程:TCP校验和计算与Offload机制详解

1. 项目概述:一个被忽视的TCP校验和细节 最近在调试一个基于Linux的C语言网络服务时,遇到了一个相当诡异的问题。我的程序能够正常完成TCP三次握手,但在握手之后发送实际的应用数据时,Wireshark抓包却总是显示数据包的TCP校验和&a…

2026/7/23 10:14:54 阅读更多 →
C++ vector 实现原理与手写教程:从内存模型到移动语义优化

C++ vector 实现原理与手写教程:从内存模型到移动语义优化

1. 项目概述:为什么vector是C程序员的“瑞士军刀”?如果你写过C,尤其是写过需要动态管理数组的代码,那你一定绕不开std::vector。它可能是你从C语言数组转向C标准库时,第一个让你感到“真香”的容器。我刚开始学C那会儿…

2026/7/23 10:14:54 阅读更多 →
闲置Mac本地部署OpenClaw智能网关实战指南

闲置Mac本地部署OpenClaw智能网关实战指南

1. 项目概述:闲置Mac变身OpenClaw智能中枢 家里那台吃灰的Intel芯片MacBook Pro终于有了用武之地。最近在开发者社区热议的OpenClaw项目,本质上是一套开源的智能体开发框架,能够将普通电脑改造成支持自然语言交互的AI网关。不同于需要云端API…

2026/7/23 10:13:54 阅读更多 →

日新闻

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:25 阅读更多 →
AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

更多请点击: https://codechina.net 第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现&#xff1…

2026/7/23 0:01:26 阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:01:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 19:43:43 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 12:54:44 阅读更多 →

月新闻