Go-goroutines
来源:互联网 发布:mac win10触控板手势 编辑:程序博客网 时间:2024/06/05 17:08
要点:
- goroutines是Go实行并发程序的一种方式
- 语法是:go function_name()
- 在执行go function_name()之后,程序马上进入go的下一条语句,而不会等待go的这个函数执行完成
- go和Linux的system调用比较类似
示例
本系列所有素材都源于Introducing Go,本例也不例外。——有些小改动。
功能:
- foo():打印1..max整数序列
- main()会启动3个go foo()
- 为了区分每个goroutine,特地在foo的打印中增加了id
- 可以确定是否在控制台输入字符串(或回车)以模拟wait或sleep
- 如果不wait,那么程序可能在退出时并不会输出所有的foo打印串
可以输入注释中的几种情况,观察输出结果。
代码
package mainimport "fmt"import "os"import "strconv"/*go run helloworld.go [max] [wait(0|1)]e.g. go run helloworld.go 5 0 go run helloworld.go 100 0go run helloworld.go 100 1*/func foo(id, max int) { for i := 1; i <= max; i++ { fmt.Println(id, i) }}func waitKey() { var input string fmt.Scanln(&input) fmt.Println("Entered:", input)}func getParams() (max int, wait bool, ok bool) { if len(os.Args) != 3 { ok = false return } max, err := strconv.Atoi(os.Args[1]) if err != nil { ok = false return } wait, err = strconv.ParseBool(os.Args[2]) if err != nil { ok = false return } ok = true return}func main() { max, wait, ok := getParams() if !ok { fmt.Println("Usage: go run helloworld.go [max] [wait(0|1)]") return } for i := 1; i <= 3; i++ { go foo(i, max) } if wait { waitKey() }}
0 0
- Go-goroutines
- gdb调试Go,info goroutines
- 在go语言中优雅退出goroutines
- 《The.Go.Programming.Language.2015.11》之Goroutines
- go语言并发编程-----Goroutines 并发模式
- Go语言圣经:Goroutines、Channels及基于共享变量的并发
- Golang--Goroutines
- Concurrency, Goroutines and GOMAXPROCS
- 两个goroutines里面的话:
- Goroutines vs Threads
- 使用contexts来避免goroutines泄露
- golang报错: all goroutines are asleep
- Go!
- GO
- GO !
- go
- Go
- Go.
- Struts2的初识
- 代码笔记 | PHP实现N*M的字符矩阵90度旋转
- POJ 2484A Funny Game
- 大型支付系统后台对账系统的控制和管理
- C++四种强制类型转换运算符总结
- Go-goroutines
- 2016-09-01收获-原创+转载(知乎) 电商SKU介绍-1
- POJ 3667Hotel
- Python数据类型和变量
- 2016-09-01感想
- Ubuntu安装字体
- orivce 魔改ss服务端bug修复(此BUG作者已修复)
- 代码笔记 | 微信红包算法
- 应用签名(译)