Press
esc
to close
请输入并搜索
Aeside's Blog
Aeside's Blog
首页
标签
分类
时间线
友链
关于
Press
Ctrl
+
and
K
to search
杂项
技术文章
随笔
个人笔记
首页
标签
分类
时间线
友链
关于
后台
协程的个人理解
编辑
2025-09-30
随笔
0
0
协程
将线程上执行的任务的
过程
,把这个事件从线程执行中分离出来,并加以保存为
自己的寄存器上下文和栈
。换句话说,复制了线程的内容,但是
只有持有内容而不是执行者
。
基于这种方式,可以
解耦内核态与用户态之间的切换
。因为在程序中一直都是使用一条线程,只不过运行在线程上的任务可以被程序(也就是用户态)控制,随时切换。
如此一来,既保障对于线程这种敏感的资源可以被内核态管理控制
保证安全
,又可以实现切换任务避免用户态和内核态切换的
性能损耗
。
关于轻量级线程
:个人认为将协程描述为轻量级的线程是有些不准确的。因为本质上,协程并没有执行任务的功能,只是“持有”这个任务。不同于线程池中提交的任务,协程是这个“任务”的超集,是“任务执行的整个事件本身”。
被挂起的协程
:协程挂起时,不占用线程,但 I/O 请求已交给操作系统处理;当数据就绪,Go 运行时通过
netpoller
监听事件,自动回调会自动唤醒协程,让它继续执行。
Go
OS
< 电商秒杀项目中 Kafka & Redis Stream 的MQ选型
MCP & Function Calling >