Golang中goroutine线程何时终止问题

Eadmund · 2015-04-03 02:46:04 · 3527 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2015-04-03 02:46:04 的主题,其中的信息可能已经有所发展或是发生改变。

/ 程序描述:探索golang中goroutine的用法 /

package main

import (
    "fmt"
    "time"
)

func saySomething(str string) {
    for i := 0; i<5; i++ {
        time.Sleep(time.Millisecond * 1000)
        fmt.Println(str)
    }
}

func main() {
    // 启动一个goroutine线程
    go saySomething("Hello")
    saySomething("World")
}

/ 关于这段代码的输出有很多问题,下面先问一个比较重要的问题 ?:为什么此时的输出结果少了一个"Hello" /


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3527 次点击  ∙  1 赞  
加入收藏 微博
4 回复  |  直到 2015-04-03 07:58:05
Eadmund
Eadmund · #1 · 10年之前

小伙伴们,拜托了~

jacob
jacob · #2 · 10年之前

主进程结束后,子进程也跟着结束了。这段代码中应该是最后一次打印的时间是出现在主进程结束后的,所以没打印是正常的。这个文档里面有详细的说明 https://talks.golang.org/2012/concurrency.slide#1

Eadmund
Eadmund · #3 · 10年之前
jacobjacob #2 回复

主进程结束后,子进程也跟着结束了。这段代码中应该是最后一次打印的时间是出现在主进程结束后的,所以没打印是正常的。这个文档里面有详细的说明 https://talks.golang.org/2012/concurrency.slide#1

谢谢你的回答,我大概知道了--是因为主进程结束了,子进程也跟着结束了。但是Java语言中就有--主进程main结束之后子进程还会继续执行。不同语言有还真是有点不同啊,看来要熟悉不同语言的“规则”了。底层开发果真牛逼,能够自己制定规则,应用层开发还是有点low啊!

blov
blov · #4 · 10年之前

什么呀,主进程退出了,子进程根本没有机会执行。Java 也会如此

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传