ToB企服应用市场:ToB评测及商务社交产业平台

标题: 深入解析 Go 语言 GMP 模型:并发编程的焦点机制 [打印本页]

作者: 十念    时间: 2024-7-30 12:27
标题: 深入解析 Go 语言 GMP 模型:并发编程的焦点机制
前言

本章是Go并发编程的起始篇章,在未来几篇文章中我们会围绕Go并发编程进行理论和实战的学习,欢迎关注我哦!
本章主要以先容GMP模型为主,偏向于面试和八股,目标是让小伙伴们注重于知识本身,面向面试,面向八股,面向加薪。
Go语言自诞生以来,就以其简洁、高效的并发模型著称。而这其中的焦点正是GMP模型。理解GMP模型的演进进程,能资助我们更好地掌握Go的并发编程。而Goroutine作为Go中的焦点概念,极大地简化了并发编程的复杂度。本文将详细阐述Go语言GMP模型的演变过程,并深入解析其设计理念和优点,并详细先容Goroutine的根本概念、优势及其使用方法,并结合具体代码示例进行说明。
面试标题

在阅读本文前,先带着以下几个关于GMP模型的面试标题进行思考,以加深理解和掌握:










带着这些问题阅读本文,可以资助你更系统地掌握GMP模型的焦点概念和调度机制,提高面试中的应答能力。
单进程时代

根本概念

在单进程时代,一个进程就是一个运行中的程序。计算机系统在执行程序时,会重新到尾依次执行完一个程序,然后再执行下一个程序。在这种模型中,不必要复杂的调度机制,因为只有一个执行流程。
面对的两个问题

多进程/线程并发时代

根本概念

为了解决单进程时代的效率问题,引入了多进程和多线程并发模型。在这种模型中,当一个进程阻塞时,CPU可以切换到另一个准备好的进程继续执行。这样可以充分使用CPU资源,提高系统的并发处置惩罚能力。
两个问题

协程的引入

为了解决多进程和多线程带来的高开销和高内存占用问题,引入了协程(Coroutine)。协程是一种比线程更轻量级的执行单元。协程在用户态进行调度,避免了频繁的上下文切换带来的开销。Go语言的GMP模型正是基于协程的设计。
协程的根本概念

在深入了解Goroutine之前,先来了解一下协程(Coroutine)的根本概念。
内核态和用户态


内核态和用户态线程关系图

执行流程

线程和协程的映射关系


Goroutine

Goroutine是Go语言中的协程,实现了轻量级并发。与传统的线程相比,Goroutine具有以下显著特点:
轻量级

Goroutine非常轻量,初始化时仅占用几KB的栈内存,并且栈内存可以根据必要动态伸缩。这使得我们可以在Go程序中创建成千上万个Goroutine,而不会消耗过多的系统资源。
高效调度

Goroutine的调度由Go语言的运行时(runtime)负责,而不是操纵系统。Go运行时在用户态进行调度,避免了频繁的上下文切换带来的开销,使得调度更加高效。
Goroutine的使用示例

下面是一个简朴的示例,展示了如安在Go语言中使用Goroutine进行并发编程。
  1. package main
  2. import (
  3.     "fmt"
  4.     "time"
  5. )
  6. func say(s string) {
  7.     for i := 0; i < 5; i++ {
  8.         time.Sleep(100 * time.Millisecond)
  9.         fmt.Println(s)
  10.     }
  11. }
  12. func main() {
  13.     go say("Hello")
  14.     go say("World")
  15.     time.Sleep(1 * time.Second)
  16.     fmt.Println("Done")
  17. }
复制代码
在这个示例中,两个Goroutine同时执行,分别打印"Hello"和"World"。通过使用go关键字,我们可以轻松地启动一个新的Goroutine。
必要注意的事项

示例:使用通道进行同步

下面的示例展示了如何使用通道来同步多个Goroutine的执行。
[code]package mainimport (    "fmt"    "sync")func worker(id int, wg *sync.WaitGroup) {    defer wg.Done()    fmt.Printf("Worker %d starting\n", id)    // 模仿工作    fmt.Printf("Worker %d done\n", id)}func main() {    var wg sync.WaitGroup    for i := 1; i




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4