[GO]goroutine的使用
package main import (
"fmt"
"time"
) func NewTask() {
for true {
fmt.Println("this is a newtesk goroutine")
time.Sleep(time.Second) //延时1
}
} func main() { //一定要写在下面的死循环之前
go NewTask()//使用go关键字新建一个协程 for true {
fmt.Println("this is a main goroutine")
time.Sleep(time.Second) //延时1
}
//NewTask()//如果按照这里的写法,这个方法肯定不会被调用到的
}
执行的结果
this is a main goroutine
this is a newtesk goroutine
this is a newtesk goroutine
this is a main goroutine
this is a main goroutine
this is a newtesk goroutine
this is a main goroutine
this is a newtesk goroutine
this is a main goroutine
this is a newtesk goroutine
///
这里有一点需要注意的是:在一个程序启动时,其主函数即在一个单独的goroutine中运行,我们叫它main goroutine,新的goroutine会用go语句来创建,当主协程(main goroutine)退出时,其它的子协程也会退出,验证一下
package main import (
"fmt"
"time"
) func main() {
go func() {
i :=
for true {
i ++
fmt.Println(" 子协程 i = ", i)
time.Sleep(time.Second)
}
}()
i :=
for true {
i ++
fmt.Println(" 主协程 i = ", i)
time.Sleep(time.Second)
if i == {
break
}
}
}
执行结果
主协程 i =
子协程 i =
主协程 i =
子协程 i =
被调用的匿名函数是无限循环,当主协程退出时,子协助就算是无限循环也退出了
[GO]goroutine的使用的更多相关文章
- TODO:Go语言goroutine和channel使用
TODO:Go语言goroutine和channel使用 goroutine是Go语言中的轻量级线程实现,由Go语言运行时(runtime)管理.使用的时候在函数前面加"go"这个 ...
- Golang之chan/goroutine(转)
原文地址:http://tchen.me/posts/2014-01-27-golang-chatroom.html?utm_source=tuicool&utm_medium=referra ...
- 【Go入门教程7】并发(goroutine,channels,Buffered Channels,Range和Close,Select,超时,runtime goroutine)
有人把Go比作21世纪的C语言,第一是因为Go语言设计简单,第二,21世纪最重要的就是并行程序设计,而Go从语言层面就支持了并行. goroutine goroutine是Go并行设计的核心.goro ...
- goroutine
Go语言从诞生到普及已经三年了,先行者大都是Web开发的背景,也有了一些普及型的书籍,可系统开发背景的人在学习这些书籍的时候,总有语焉不详的感觉,网上也有若干流传甚广的文章,可其中或多或少总有些与事实 ...
- 进程、线程、轻量级进程、协程与 go 的 goroutine【转载+整理】
本文内容 进程 线程 协程 Go 中的 goroutine 参考资料 最近,看一些文章,提到"协程"的概念,心想,进程,线程,协程,前两个很容易,任何一本关于操作系统的书都有说,开 ...
- Golang控制goroutine的启动与关闭
最近在用golang做项目的时候,使用到了goroutine.在golang中启动协程非常方便,只需要加一个go关键字: go myfunc(){ //do something }() 但是对于一些长 ...
- [转载] goroutine背后的系统知识
原文: http://www.sizeofvoid.net/goroutine-under-the-hood/ 文章写的非常好, 对内部原理解释的非常清楚, 是我喜欢的风格, 感谢作者的精彩文章. = ...
- golang的goroutine与channel
Golang的goroutine是非抢占式的, 令人相当蛋疼! 有痛不能呻吟...只能配合channel在各goroutine之间传递信号来实现抢占式, 而这形成了golang最灵活与最具性能的核心. ...
- [golang学习] goroutine调度
这两天有些闲功夫, 学习下golang, 确实非常简洁. 不过有些缺憾. 在我的测试中. golang的调度(goroutine)似乎不是非常好. func say(k int) { fmt.Prin ...
- 进程、线程、轻量级进程、协程和go中的Goroutine
进程.线程.轻量级进程.协程和go中的Goroutine 那些事儿电话面试被问到go的协程,曾经的军伟也问到过我协程.虽然用python时候在Eurasia和eventlet里了解过协程,但自己对协程 ...
随机推荐
- kubernetes 学习 pod相关
1 pod的状态: Pending, Running, Succeeded, Failed, Unknown 2 pod重启策略: Always(自动重启,是默认的) . OnFailure(容 ...
- poj 3518 Prime Gap
Prime Gap Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 7392 Accepted: 4291 Descrip ...
- [lua]判断nginx收到的是否json
local post_data = ngx.req.get_body_data() --[[ngx.log(ngx.ERR, 'post data:', post_data)]] local ok, ...
- openstack网络架构(nova-network/neutron)
openstack网络体系中,网络技术没有创新,但用到的技术点非常庞杂,包括bridge.vlan.gre.vxlan.ovs.openflow.sdn.iptables等,当然这里不会做具体技术介绍 ...
- js中的web加密
js中的web加密 window.crypto.subtle只会在安全模式下有用,也就是https环境下 创建摘要(硬解) var i = new TextEncoder('utf-8').encod ...
- Tkinter Message
Python GUI - Tkinter Message(消息):这个小工具提供了一个多和不可编辑的对象,显示文本,自动断行和其内容的理由. 这个小工具提供了一个多和不可编辑的对象,显示文本,自动 ...
- MongoDB + Spark: 完整的大数据解决方案
Spark介绍 按照官方的定义,Spark 是一个通用,快速,适用于大规模数据的处理引擎. 通用性:我们可以使用Spark SQL来执行常规分析, Spark Streaming 来流数据处理, 以及 ...
- 关于java中word转html
http://www.dewen.org/q/5820/java%E4%B8%AD%E6%80%8E%E4%B9%88%E5%B0%86word%E6%96%87%E6%A1%A3%E8%BD%ACh ...
- 「小程序JAVA实战」小程序上传短视频(46)
转自:https://idig8.com/2018/09/14/xiaochengxujavashizhanxiaochengxushangchuanduanshipin45/ 个人信息:用户上传短视 ...
- SpringData
1.什么是SpringData?Spring Data 项目的目的是为了简化构建基于 Spring 框架应用的数据访问计数,包括非关系数据库.Map-Reduce 框架.云数据服务等等:另外也包含对关 ...