![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Go 学习与探索
文章平均质量分 93
Go 相关的所有学习和有趣的东西记录
Jiangw557
这个作者很懒,什么都没留下…
展开
-
Go 的并发机制(4)
应该以通信作为手段来共享内存” 的最直接和最重要的体现: channel。它提供了一种机制,既可以同步两个并发执行的函数,也可以让这两个函数通过相互传递特定类型的值来通信。原创 2024-06-12 17:02:25 · 596 阅读 · 0 评论 -
Go 的并发机制(3)
(之前是for 循环的变量只创建一次,在每次循环的时候都会更新,而闭包在访问 name 的时候实际都访问的是同一个内存地址,所以最终打印都是同一个值。Go 运行时系统对 go 语句中的函数的执行时并发的,更确切地说,当 go 语句执行的时候,其中的 go 函数会被单独放入一个 goroutine 中。调用表达式所表达的就是针对函数或方法的调用,其中的函数可以是命名的,也可以是匿名的。一旦 main 函数执行结束,就意味着 Go 程序运行的结束,但这个时候运行 go 函数的 G 可能还没来得及执行。原创 2024-06-06 18:18:43 · 743 阅读 · 0 评论 -
Go 的并发机制(2)
两级线程模型中的一部分调度任务会由操作系统内核之外的程序承担,在 Go 语言中,调度器就负责这一部分调度任务,调度的主要对象就是 M、P 和 G 的实例。在 Go 的线程实现模型中,P 起到承上启下的重要作用,P最大数量的变更就意味着要改变 G 运行的上下文环境,也直接影响 Go 程序的并发性能。(1)除了本地 P 还有非空闲的 P,因为空闲的 P 的可运行 G 队列必定为空,如果除了本地 P 之外的所有 P 都是空闲的,就没必要去偷了。同样的,针对系统监测任务,也需要先暂停,然后再执行串行运行时任务。原创 2024-06-03 18:23:34 · 967 阅读 · 0 评论 -
Go 的并发机制(1)
一般来说,创建一个 M,都是因为没有足够的 M 来关联 P 并运行其中可运行的 G。不过,在运行时系统执行系统监控或者垃圾回收等任务的时候,也会导致 M 的创建。因为操作系统内核对进程的虚拟内存的布局控制以及大小限制,一般难以共存如此量级的线程。本节,我们一直是将实现和操纵 Go 的线程实现模型的内部程序笼统地称为“运行时系统”。系统停止 M 的时候,会把它放入调度器的空闲 M 列表(运行时系统会优先从这个列表获取)Go 其实时在操作系统提供的内核线程之上,搭建了一个特有的两级线程模型。原创 2024-05-31 10:56:48 · 938 阅读 · 0 评论