文档章节

go并发编程实践

qii
 qii
发布于 2016/06/17 17:03
字数 387
阅读 38
收藏 0

go语言中,并发执行程序,只需要一个go关键字即可。

写了一段测试代码如下:

package main

import (
	"fmt"
)

func main() {
   go func(){
      fmt.Println("go")
   }()
   fmt.Println("done")
}

程序输出为 done

奇怪的是,go没有输出。

讲道理,输出应该是go done,这样才对。

看了下例子,重新改写了一下代码:

package main

import (
	"fmt"
   "time"
)

func main() {
   go func(){
      fmt.Println("go")
   }()
   fmt.Println("done")
   time.Sleep(time.Second)
}

这次输出为:done go

为何暂停一下,就能输出go。

我的理解是,go的并发编程,其实是多线程的,不是多进程的。

mian函数是一个进程,而go启用的,是mian下面的一个线程,当没有暂停时,主进程结束了,go后面的函数还没来得及执行,就被回收了。而暂停了一下,由于计算机的执行速度非常快,哪怕只有1秒钟,都够线程执行了,因此能够顺利的打印出“go”来。

假设go后面执行的函数,是一个超级漫长的逻辑,非常耗时的处理流程,那么暂停一下肯定也是不行的。

测试代码:

package main

import (
	"fmt"
   "time"
)

func main() {
   go func(){
      i:=0
      for{
         fmt.Println(i)
         i++
      }
   }()
   fmt.Println("done")
   time.Sleep(time.Second)
}

讲道理,这个死循环应该要一直执行下去,但是1秒钟后,还是停止执行了,说明猜想是正确的。

这样的话,如果是并发的编程,在mian最后,都需要个死循环来让主线程一直存在,比如

for{
    time.Sleep(time.Second)
}

 

© 著作权归作者所有

上一篇: msyql 1062
下一篇: atom折腾记
qii

qii

粉丝 13
博文 77
码字总数 23520
作品 0
昆明
高级程序员
私信 提问
并发编程网线下沙龙

沙龙背景 马上就是并发编程网(ifeve.com)三岁生日了,首先感谢各位读者粉丝对我们的大力支持和鼓励!三年来,我们共组织翻译了600余篇文章,其中Disruptor、NIO、Netty、Storm、并发编程、...

lateron
2014/08/23
52
0
福利丨用这两本好书,承包你的整个元旦小长假!

俗话说得好,圣诞都过了,元旦还会远吗? 在这小长假来临之际,小编为大家带来新一期@图灵教育 出版的好书推荐:《Docker:容器与容器云(第2版)》与《Go并发编程实战》。 当然,按照往期惯...

DBAplus社群
2016/12/30
0
0
【Python Web学习路线】干货整理,不谈虚的,让你短时间高效学好它!

无论是大数据、人工智能还是机器学习,Python都是最热门的首选语言。 学好Python,可以从事Python Web工程师、Python数据分析、人工智能专家等岗位。本期专题,分享的主题是“如何成为一枚优...

Eddie_yang
2018/12/24
747
0
java并发编程实战练手项目

看了java并发编程的艺术 学习了一些并发编程的概念 一些并发工具类,但是有什么好的实践项目可以练手学习一下,避免纸上得来终觉浅。

天生杀人狂
2018/07/27
1K
2
A Year Of Books - 2016 Javaer书单

A Year Of Books – 2016 Javaer书单 (PS:欢迎留言推荐,很多来自白衣大哥的推荐) 1. OS & Networking 《编码 : 隐匿在计算机软硬件背后的语言》 《Linux内核设计与实现 第3版》 《WireShark...

泥沙砖瓦浆木匠
2016/04/25
151
2

没有更多内容

加载失败,请刷新页面

加载更多

【1015】LNMP架构二

【1015】LNMP架构二 三、PHP安装 PHP安装和LAMP安装PHP方法有差别,需要开启php-fpm服务 1、下载PHP7至/usr/local/src/ 切换目录:cd /usr/local/src 2、解压缩 tar -jxvf php-7.3.0.tar.gz...

飞翔的竹蜻蜓
30分钟前
3
0
浅谈Visitor访问者模式

一、前言 什么叫访问,如果大家学过数据结构,对于这点就很清晰了,遍历就是访问的一般形式,单独读取一个元素进行相应的处理也叫作访问,读取到想要查看的内容+对其进行处理就叫作访问,那么...

青衣霓裳
48分钟前
6
0
JS内嵌多个页面,页面之间如何更快捷的查找相关联的页面

假设parent为P页面, P页面有两个子页面,分别为B页面和C页面; B页面和C页面分别内嵌一个iframe,分别为:D页面和E页面 现在通过B页面的内嵌页面D的方法refreshEpage(eUrl)来加载内嵌页面E的内容...

文文1
49分钟前
7
0
Hibernate 5 升级后 getProperties 错误

升级到 Hibernate 5 后,提示有错误: org.hibernate.engine.spi.SessionFactoryImplementor.getProperties()Ljava/util/Map; 完整的错误栈为: java.lang.NoSuchMethodError: org.hibernate......

honeymoose
51分钟前
6
0
mysql-connector-java升级到8.0后保存时间到数据库出现了时差

在一个新项目中用到了新版的mysql jdbc 驱动 <dependency>     <groupId>mysql</groupId>     <artifactId>mysql-connector-java</artifactId>     <version>8.0.18</version> ......

ValSong
54分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部