go之多线程
来源:互联网 发布:全面战争哪代优化最好 编辑:程序博客网 时间:2024/05/21 10:02
在go里面,并发程序依靠的是goroutine和channel。
goroutine可以理解为线程,当对一个函数调用go,启动一个goroutine的时候,就相当于起来一个线程来执行这个函数。比如:
func getInfo(name string, age int) {
fmt.Printf("name: %s,age: %d \n", name, age)
}
func main() {
go getInfo("li", 12)
go getInfo("sun", 45)
fmt.Println("start")
time.Sleep(1 * 1e10)
}
输出:
start
name: li,age: 12
name: sun,age: 45
当起一个goroutine后,主线程不知道这个goroutine什么时候结束,所以在上面的main函数里设了一个sleep来等待两个goroutine处理完,由此可见,当goroutine结束后必须要通过某种方式来告知主线程自己已经结束。
在go里面则是通过channel来传递这种消息,如:
var c chan int
func getInfo(name string, age int) {
fmt.Printf("name: %s,age: %d \n", name, age)
c <- 0
}
func main() {
c = make(chan int)
go getInfo("li", 12)
go getInfo("sun", 45)
fmt.Println("start")
<-c
<-c
}
channel只能通过make来创建,指定channel的类型(如int)可以说明这个管道能传什么类型的数据。往channel中插入数据用c<-0,取出则是用<-c,取出两次是为了告知主线程两个子线程都运行完毕。
参考:http://www.cnblogs.com/yjf512/archive/2012/06/06/2537712.html
0 0
- go之多线程
- android线程之多线程
- GroboUtils之多线程测试
- Java学习之多线程
- java基础教程之多线程
- ecl之多线程
- Qt之多线程(一)
- Qt之多线程(二)
- 黑马程序员之多线程
- iOS 之多线程 NSThread
- delphi之多线程编程
- MFC之多线程创建
- java之多线程
- Java学习之多线程
- iOS 之多线程
- 面试题之多线程
- 阻塞模式之多线程
- python之多线程
- MyEclipse启动Tmocat卡住
- 点击td转换成input,失去焦点时发送修改数据
- android开发必备官方链接
- [转]shell 1>&2 2>&1 &>filename重定向的含义和区别
- 验证用户名是否已存在
- go之多线程
- 判断文本是否是utf-8格式 (用于区分GB2312和UTF-8)
- struts2的核心和工作原理
- KMP算法
- formValidator插件检查用户是否已存在
- 框架Quartz
- Fiddler抓取http请求(web/手机/移动端)
- Google Authenticator
- del,md,rd,ren,copy,压缩,解压缩