|
|
51CTO旗下网站
|
|
移动端

10.2.1 协程基础

《Go语言编程入门与实战技巧》第10章并发编程,本章Go语言里的并发指的是能让某个函数独立于其他函数运行的能力。当一个函数创建为协程(goroutine)时,Go语言会将其视为一个独立的工作单元,这个单元会被调度到可用的逻辑处理器上执行。本节为大家介绍协程基础。

作者:黄靖钧来源:电子工业出版社|2018-09-23 09:45

【大咖·来了 第7期】10月24日晚8点观看《智能导购对话机器人实践》

10.2.1  协程基础

goroutine是Go语言并行设计的核心。goroutine说到底其实就是协程,但是它比线程更小,十几个goroutine可能体现在底层也就是五六个线程,Go语言内部帮你实现了这些goroutine之间的内存共享。执行goroutine只需极少的栈内存(大概是4KB~5KB),当然会根据相应的数据伸缩。也正因为如此,程序可同时运行成千上万个并发任务。goroutine比thread更易用、更高效、更轻便。

goroutine是通过Go程序的runtime管理的一个线程管理器。goroutine通过go关键字实现了,其实就是一个普通的函数:

  1. go hello(a, b, c) 

通过关键字go就启动了一个goroutine。下面来看一个例子:

  1. // 示例代码10-2  
  2. package main  
  3.  
  4. import (  
  5.     "fmt"  
  6.     "runtime"  
  7. )  
  8.  
  9. func say(s string) {  
  10.     for i :0; i < 5; i++ {  
  11.         runtime.Gosched()  
  12.         fmt.Println(s)  
  13.     }  
  14. }  
  15.  
  16. func main() {  
  17.     go say("world") // 开一个新的goroutine执行  
  18.     say("hello") // 当前goroutine执行  
  19. }  
  20. /*  
  21. 返回:  
  22. hello  
  23. world  
  24. hello  
  25. world  
  26. hello  
  27. world  
  28. hello  
  29. world  
  30. hello  
  31. */  

可以看到go关键字很方便地就实现了并发编程。上面的多个goroutine运行在同一个进程里面,共享内存数据,不过设计上要遵循:不要通过共享来通信,而要通过通信来共享。

runtime.Gosched()表示让CPU把时间片让给别人,下次某个时候继续恢复执行该goroutine。在默认情况下,在Go 1.5以后将标识并发系统线程个数的runtime.GOMAXPROCS的初始值由1改为了运行环境的CPU核数。

可以通过设置runtime.GOMAXPROCS(n)告诉调度器***可以使用多少个线程,GOMAXPROCS设置了同时运行逻辑代码的系统线程的***数量,并返回之前的设置。如果n < 1,不会改变当前设置。


喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书会第9群:808517103

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

16招轻松掌握PPT技巧

16招轻松掌握PPT技巧

GET职场加薪技能
共16章 | 晒书包

289人订阅学习

20个局域网建设改造案例

20个局域网建设改造案例

网络搭建技巧
共20章 | 捷哥CCIE

645人订阅学习

WOT2019全球人工智能技术峰会

WOT2019全球人工智能技术峰会

通用技术、应用领域、企业赋能三大章节,13大技术专场,60+国内外一线人工智能精英大咖站台,分享人工智能的平台工具、算法模型、语音视觉等技术主题,助力人工智能落地。
共50章 | WOT峰会

0人订阅学习

读 书 +更多

网管员必读——超级网管经验谈

本书是一本以示例形式直接面向应用的网络管理图书。书中以大量示例和大量实用网络管理与故障排除经验介绍了当前网络管理工作的各主要方面。...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO播客