goroutine调度策略

server/2024/9/24 5:11:01/

Golang的调度器采用M:N调度模型,其中M代表用户级别的线程(也就是goroutine),而N代表的事内核级别的线程。Go调度器的主要任务就是N个OS线程上调度M个goroutine。这种模型允许在少量的OS线程上运行大量的goroutine

Go调度器使用了三种队列来管理goroutine

  1. 全局队列(Global Queue):此队列中包含了所有刚创建的goroutine
  2. 本地队列(Local Queue):每个P(Processor,处理器)都有一个本地队列,P会有限从本地队列中取出goroutine来执行。
  3. 网络轮循器(Netpoller):此队列中包含了所有在等待网络时间(如IO操作)的goroutine。当网络事件就绪时,对应的goroutine会被放入到全局队列中,等待被P取出。

Go的调度器采用了工作窃取(Work Stealing)和手动抢占(Preemption)的策略

  • 工作窃取:当一个P的本地队列中没有goroutine时,它会尝试从全局队列或其他P的本地队列中窃取goroutine来执行。
  • 手动抢占:为了防止一个goroutine长时间占用P而导致其他goroutine饿死,Go的调度器会定期地进行抢占操作。在Go 1.14之前,Go的调度器只在函数调用时才会进行抢占,从Go 1.14开始引入了异步抢占,即允许在任何安全点进行抢占。

这种调度模型和策略使得Go语言可以有效地利用硬件资源,处理大量的并发任务,同时也为复杂的并发编程提供了简介的语言级别的支持。

最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB


http://www.ppmy.cn/server/41707.html

相关文章

linux 开发常用命令

一、查看 相关服务 1.查看 数据库 相关服务 这里以mysql 和 redis 为例 (1)使用 ps 命令 执行命令会列出,“mysql”、“redis”名称的进程 ps aux | grep redis 示例: rootspray:~# ps aux | grep mysql mysql 1609816 0.…

树莓派|角速度和加速度传感器

角速度传感器和加速度传感器是常见的惯性传感器,常用于测量物体的旋转和线性运动。 角速度传感器(Gyroscope)用于测量物体绕三个轴(X、Y、Z)的旋转速度或角速度。它可以提供关于物体在空间中的旋转方向和角度变化的信…

【scikit-learn004】决策树(Decision Trees)ML模型实战及经验总结(更新中)

1.一直以来想写下基于scikit-learn训练AI算法的系列文章,作为较火的机器学习框架,也是日常项目开发中常用的一款工具,最近刚好挤时间梳理、总结下这块儿的知识体系。 2.熟悉、梳理、总结下scikit-learn框架决策树(Decision Trees&…

HTML批量文件上传2——进度条显示

作者:私语茶馆 非常多的云应用中需要上传文本,包括图片,文件等等,这些批量文件上传,往往涉及到进度条显示,多文件上传等,这里分享一个非常好的案例,来自BootStrapfriendly.com&#…

函数1111

DDL CREATE TABLE student (id INT PRIMARY KEY AUTO_INCREMENT,createDate DATETIME NOT NULL,userName VARCHAR(255) NOT NULL,phone VARCHAR(20) NOT NULL,age INT NOT NULL,sex ENUM(男, 女) NOT NULL,introduce TEXT ); DML INSERT INTO student (creatDate, userName,…

前端 performance api使用 —— mark、measure计算vue3页面echarts渲染时间

文章目录 ⭐前言💖vue3系列文章 ⭐Performance api计算持续时间💖 mark用法💖 measure用法 ⭐计算echarts渲染的持续时间⭐结束 ⭐前言 大家好,我是yma16,本文分享关于 前端 performance api使用 —— mark、measure计…

C语言----斐波那契数列(附源代码)

各位看官们好,当我写了上一篇博客杨辉三角后,有一些看官叫我讲一下斐波那契数列。对于这个大家应该是有了解的。最简单的规律就是f(n)f(n-2)f(n-1)。就是当前是前两项之和,然后下标1和0都是1.从第三项开始计算的。那么我们知道规律&#xff0…

2024下半年软考科目怎么选?无需纠结!

2024上半年软考考试时间为5月25-28日、2024下半年软考考试时间为11月9-12日。今年软考官方对上、下半年的开考科目做了巨大调整,比如中项就改为一年一次仅在下半年开考。给大家整理了2024年下半年软考开考科目,大家可以看看有没有自己感兴趣的。 2024下…