go语言-协程

mOS结构体 每一种操作系统不同的线程信息

g给g0栈给g0协程内存中分配的地址,记录函数跳转信息,

单线程循环 0.x版本

1.0版本 多线程循环

操作系统并不知道Goroutine的存在

操作系统线程执行一个调度循环,顺序执行Goroutine

调度循环非常像线程池

G-M-P调度模型

本地队列抓取资源,避免锁冲突

P是本地队列,m是服务的线程

head是头 tail是尾部 runq 协程结构体数据

下一个可用结构体

协程饥饿问题

切换时机

主动挂起gopark

mcall切换栈

系统调用完成时

抢占式调度

调用其他方法之前,编译器都要插入一个runtime.morestack(),基于协作主动调度

morestack的本意是检查协程栈是否有足够空间

系统监控Goruntime运行超过10s 将g.stackguard0置为0xfffffade

执行morestack0时判断是否被抢占如果被抢占,回到schedule0

基于信号的抢占式调度

操作系统中,有很多基于信号的底层通信方式

比如 SIGPIPE / SIGURG / SIGHUP

线程可以注册对应信号的处理函数

注册SIGURG信号的处理函数 紧急信号

GC工作时候,向目标线程发送信号

协程太多

处理方案

相关推荐
Grassto6 小时前
深入 `modload`:Go 是如何加载并解析 module 的
golang·go·go module
帅猛的Shic19 小时前
Kubernetes Service深度解析:为什么Pod需要稳定接入点
kubernetes·go
molaifeng20 小时前
Token:AI 时代的数字货币——从原理到计费全解
人工智能·ai·大模型·llm·go·token
天天进步20152 天前
KrillinAI 源码级深度拆解四: 告别违和感:深度剖析 KrillinAI 中的 Lip-sync 唇形对齐技术实现
go
用户1296157358552 天前
Go语言云原生与微服务架构终极实践指南
go
踏浪无痕3 天前
Go 的协程是线程吗?别被"轻量级线程"骗了
后端·面试·go
程序员泡椒3 天前
二分查找Go版本实现
数据结构·c++·算法·leetcode·go·二分
且去填词3 天前
Go 语言的“反叛”——为什么少即是多?
开发语言·后端·面试·go
用户26851612107564 天前
GMP 调度器深度学习笔记
后端·go
Coding君4 天前
每日一Go-20、Go语言实战-利用Gin开发用户注册登录功能
go