1. 概念

goroutine 奉行通过通信来共享内存,而不是共享内存来通信

goroutine 是由go的运行时(runtime)调度和管理的
go程序会智能的将goroutine中的任务合理的分配给CPU执行

go语言之所以会被称为现代化编程语言,是因为它在语言层面已经内置了调度和上下文切换的机制

在go语言编程中你不需要自己去写进程、线程、协程,当你需要让某个任务并发执行的时候,
你只需要把这个任务包装成一个函数,开启一个goroutine去执行这个函数就可以了。

一个goroutine必须对应一个函数,可以创建多个goroutine去执行相同的函数

2. goroutine实现同步

package main

import (
"fmt"
"sync"
) var wg sync.WaitGroup func main() { for i := 0; i < 10; i++ {
wg.Add(1)
go hello(i)
} // 此处使用sync.WaitGroup来实现goroutine的同步
wg.Wait() // 多次执行代码,发现打印的顺序不一致,因为10个goroutine是并发执行的,而goroutine的调度是随机的 } func hello(i int) {
defer wg.Done()
fmt.Println("goroutine", i)
}

  

3.  子goroutine是依赖于主goroutine的,主goroutine一旦结束,子goroutine立马结束

package main

import (
"fmt"
"time"
) func main() {
// 合起来写
go func() {
i := 0
for {
i++
fmt.Printf("new goroutine: i = %d\n", i)
time.Sleep(time.Second)
}
}()
i := 0
for {
i++
fmt.Printf("main goroutine: i = %d\n", i)
time.Sleep(time.Second)
if i == 2 {
break
}
}
}

  

最新文章

  1. PostgreSQL-function、trigger
  2. 强大的commons
  3. MySQL数据库备份和还原的常用命令小结
  4. 40. Combination Sum II
  5. easyui textarea IE8中无法换行
  6. UART与USART的差别
  7. jquery插件,美化select标签
  8. 静态方法中不能new内部类的实体对象
  9. 怎么提高ArcGIS for Desktop10.x的性能
  10. 我的Cocos2dx开发模式
  11. (3)markdown软件的使用
  12. Hyperledger Fabric Model——超级账本组成模型
  13. 【BZOJ3224】【tyvj1728】普通平衡树
  14. jquery操作iframe的方法:父页面和子页面相互操作的方法
  15. [蓝桥杯]ALGO-20.算法训练_求先序排列
  16. c++ primer 笔记 (二)
  17. 前端基础之jQuery操作标签
  18. Linux 指令(一)文件/目录操作
  19. 《剑指offer》— JavaScript(31)整数中1出现的次数(从1到n整数中1出现的次数)
  20. Jenkins+Ant+Git+Jmeter实现持续集成

热门文章

  1. Go1.18中的泛型编程
  2. 【LeetCode】294. Flip Game II 解题报告 (C++)
  3. 【LeetCode】1003. Check If Word Is Valid After Substitutions 解题报告(Python)
  4. 【LeetCode】605. Can Place Flowers 解题报告(Python & C++)
  5. 【LeetCode】643. 子数组最大平均数 I Maximum Average Subarray I (Python)
  6. 【LeetCode】817. Linked List Components 解题报告(Python & C++)
  7. The Longest Straight(FZUoj2216)
  8. Electron-Vue 项目使用Element的el-table组件不显示
  9. 使用 jQuery 选择器获取页面元素,然后利用 jQuery 对象的 css() 方法设置其 display 样式属性,从而实现显示和隐藏效果。
  10. 编写Java程序,实现客户端向服务端上传文件的功能