【Go】Go語言并發模型:MPG

Go 語言并發模型:MPG

Go 的并發模型主要由三個部分構成:

  • M (Machine)
    系統線程,用于實際執行任務。

  • P (Processor)
    邏輯處理器,負責管理和調度 goroutine。每個 P 擁有一個本地隊列和關聯的全局 G 隊列。

  • G (Goroutine)
    Go 語言中的協程,是程序執行的基本單元。


M 與 P 的關系

  • 1:1 關系
    每個運行的任務對應的 M 必須關聯一個 P,即 M 和 P 是一對一的關系。

  • 本地隊列與全局隊列

    • 每個 P 擁有自己的本地 G 隊列,當本地隊列滿時,多余的 G 會被放入全局隊列中。

系統調用和調度機制

Syscall 與阻塞處理

  1. 線程阻塞

    • 當某個 M(例如 M0)在執行 syscall 時陷入阻塞,它會釋放所綁定的 P。
    • 該 P 會轉交給一個空閑的 M(例如 M1)繼續執行。
    • 如果沒有空閑的 M,則會創建新的 M 來接管 P。
  2. 系統調用結束后的處理

    • 如果 M0 在系統調用結束后能獲取到空閑的 P,則繼續執行原來的 G(例如 G0)。
    • 如果沒有空閑的 P,則 G0 會被放入全局隊列,等待其它 P 調度,而 M0 則進入緩存池等待喚醒。
  • 全局隊列 (runqueue)
    該隊列用于調度各個 P 在運行完本地隊列后的 G。

Work Stealing 機制

  • 調度策略
    • 當當前線程的本地隊列中沒有可運行的 G 時,會首先嘗試從全局隊列中獲取任務。
    • 如果全局隊列中也沒有可用的 G,該線程將從其它線程綁定的 P 中“偷取”一半的 G 以保證負載均衡。

Sysmon 協程

  • 作用

    • sysmon 協程專門用于監控和管理協程狀態,不需要 P 的支持即可執行。
  • 搶占策略

    • 在 Go 中,所有 goroutine 最多占用 CPU 時間為 10ms,超過這個時間的協程會被搶占,以防止某個 goroutine 獨占 CPU,確保其他 goroutine 得到運行機會。

補充機制

  • 協程搶占

    • 通過協程搶占機制,Go 能夠在長時間運行的協程中及時切換,確保系統中各個任務的公平調度。
  • 垃圾回收

    • Go 的垃圾回收機制會定期回收不再使用的內存,優化內存資源的利用。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/74434.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/74434.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/74434.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SpringCloud配置中心:Config Server與配置刷新機制

文章目錄 引言一、Config Server基礎架構1.1 Server端配置1.2 配置文件命名規則 二、Config Client配置2.1 Client端配置2.2 配置注入與使用 三、配置刷新機制3.1 手動刷新配置3.2 使用Spring Cloud Bus實現自動刷新3.3 配置倉庫Webhook自動觸發刷新 四、高級配置管理策略4.1 配…

PyTorch生成式人工智能實戰:從零打造創意引擎

PyTorch生成式人工智能實戰:從零打造創意引擎 0. 前言1. 生成式人工智能1.1 生成式人工智能簡介1.2 生成式人工智能技術 2. Python 與 PyTorch2.1 Python 編程語言2.2 PyTorch 深度學習庫 3. 生成對抗網絡3.1 生成對抗網絡概述3.2 生成對抗網絡應用 4. Transformer4…

allure結合pytest生成測試報告

結合 pytest 和 Allure 可以生成詳細而美觀的測試報告,幫助測試人員和開發者更好地理解測試結果。這包括測試的執行情況、步驟、附件(如截圖)、分類以及優先級標記。下面是如何在 pytest 中使用 Allure 生成測試報告的步驟: 安裝…

STM32標準庫開發中斷流程

在STM32標準外設庫(SPL)開發中,外設中斷的處理流程通常如下: 一、標準庫外設中斷處理流程 (1)使能外設時鐘 在使用任何外設之前,都必須打開外設的時鐘。例如,使用USART1的中斷&…

【計算機網絡】-計算機網絡期末復習題復習資料

一、計算機網絡體系結構(800字) 1. OSI參考模型 七層結構:物理層→數據鏈路層→網絡層→傳輸層→會話層→表示層→應用層 各層核心功能: 物理層:比特流傳輸(如RJ45、光纖接口) 數據鏈路層&…

31天Python入門——第9天:再學函數

你好,我是安然無虞。 文章目錄 再學函數1. 變量在函數中的作用域2. 函數的參數傳遞.補充學習: 不定長參數*args和**kwargs 3. 值傳遞和引用傳遞補充學習: 把函數作為參數傳遞 4. 匿名函數5. python中內置的常用函數zip()map()filter()all()any() 6. 函數練習 再學函…

EasyUI數據表格中嵌入下拉框

效果 代碼 $(function () {// 標記當前正在編輯的行var editorIndex -1;var data [{code: 1,name: 1,price: 1,status: 0},{code: 2,name: 2,price: 2,status: 1}]$(#dg).datagrid({data: data,onDblClickCell:function (index, field, value) {var dg $(this);if(field ! …

【C語言】多進程/多線程

【C語言】多進程/多線程 參考鏈接多進程/多線程服務器1. 多進程服務器2. 多線程服務器 結語參考鏈接 參考鏈接 c 中文網 菜鳥 c 多進程/多線程服務器 多進程和多線程是常用的并發編程技術。它們都允許程序同時執行多個任務,提高了系統的資源利用率和程序的運行效率…

mysql 磐維(opengauss)tidb誤刪數據之高級恢復

Mysql參考: Mysql 8.0 XtraBackupMysqlbinlog 完全恢復 - 墨天輪 Mysql 8.0 XtraBackupMysqlbinlog 完全恢復[TOC]# 一、安裝mysql 8.0.19## 1.1https://www.modb.pro/db/509223MySQL 的全量備份、增量備份與 Binlog 時間點恢復_mysqlbinlog自動備份嗎-CSDN博客文章…

3. 軸指令(omron 機器自動化控制器)——>MC_SetPosition

機器自動化控制器——第三章 軸指令 11 MC_SetPosition變量?輸入變量?輸出變量?輸入輸出變量 功能說明?時序圖?重啟動運動指令?多重啟運動指令?異常 MC_SetPosition 將軸的指令當前位置和反饋當前位置變更為任意值。 指令名稱FB/FUN圖形表現ST表現MC_SetPosition當前位…

從 @SpringBootApplication 出發,深度剖析 Spring Boot 自動裝配原理

在 Spring Boot 的開發旅程中,SpringBootApplication 注解堪稱開啟便捷開發之門的鑰匙。它不僅是一個簡單的注解,更是理解 Spring Boot 自動裝配原理的重要入口。接下來,我們將以SpringBootApplication 為切入點,深入探究 Spring …

MySQL面試專題

1.什么是BufferPool? Buffer Pool基本概念 Buffer Pool:緩沖池,簡稱BP。其作用是用來緩存表數據與索引數據,減少磁盤IO操作,提升效率。 Buffer Pool由緩存數據頁(Page) 和 對緩存數據頁進行描述的控制塊 組成, 控制…

調用百度api實現語音識別(python)

該代碼實現了一個企業級的語音識別解決方案,通過調用百度語音識別API,實現實時錄音識別和對已有音頻語音識別功能。 百度智能云:請自行訪問百度智能云,開通免費的語音識別功能,獲取API_KEY和SECRET_KEY。操作按照百度流程即可,可免費申請。 首先,配置下百度API和描述下錯…

KRaft模式

目錄標題 Kraft模式**1. 什么是Kraft模式?****2. 為什么引入Kraft模式?****3. 核心優勢****4. 架構與工作原理****5. 部署與配置要點****6. 適用場景與最佳實踐****總結**KIP-833: Mark KRaft as Production Ready除了Kraft模式,Kafka還有以下…

單片機電路中常見的英文術語及縮寫

以下是單片機電路中常見的英文術語及縮寫的解釋及其作用說明,按功能分類整理,便于理解: 一、核心術語 MCU (Microcontroller Unit) ? 中文:微控制器單元 ? 作用:單片機的核心芯片,集成CPU、存儲器、外設接…

常見框架漏洞之一:Thinkphp5x

ThinkPHP是為了簡化企業級應?開發和敏捷WEB應?開發?誕?的,是?個快速、兼容?且簡單的輕量級國產PHP開發框架,誕?于2006年初,原名FCS,2007年元旦正式更名為 ThinkPHP,遵循Apache2開源協議發布,從Stru…

2025年優化算法:龍卷風優化算法(Tornado optimizer with Coriolis force,TOC)

龍卷風優化算法(Tornado optimizer with Coriolis force)是發表在中科院二區期刊“ARTIFICIAL INTELLIGENCE REVIEW”(IF:11.7)的2025年智能優化算法 01.引言 當自然界的狂暴之力,化身數字世界的智慧引擎&…

面試中如何回答性能優化的問題

性能問題和Bug不同,后者的分析和解決思路更清晰,很多時候從應用日志(文中的應用指分布式服務下的單個節點)即可直接找到問題根源,而性能問題,其排查思路更為復雜一些。 對應用進行性能優化,是一個系統性的工程,對工程師的技術廣度和技術深度都有所要求。一個簡單的應用…

CMake 函數和宏

CMake 函數 CMake 函數定義語法如下, 其中 name 為函數名, <arg1> 為參數名, <commands> 為函數體. 函數定義后, 可以通過 name 調用函數. 函數名允許字母數字下劃線, 不區分大小寫. function(name [<arg1> ...])<commands> endfunction()如下的樣例…

【QA】Qt有哪些迭代器模式的應用?

在 Qt/C 中&#xff0c;迭代器模式的設計主要分為 標準 C 風格 和 Qt 框架特有風格&#xff0c;以下結合代碼詳細說明兩種實現方式的關鍵設計及其應用場景&#xff1a; 一、Qt 框架中的迭代器模式設計 Qt 提供了兩種迭代器風格&#xff1a;Java 風格&#xff08;顯式迭代器&am…