我正在閱讀Go併發模式片。我有點困惑的聲明之間的表面上的矛盾上slide #16:主要只是一個普通的門廳嗎?
當主的回報,程序退出,並採取枯燥功能打倒它。
和slide #19另一個(組合與example on slide #20):
在Go的信道提供了兩個夠程之間的連接,允許它們進行通信。
如果main
是只是一個夠程,它是怎樣導致任何其他(生成)的goroutine停止,換句話說:在何種意義上是夠程命名爲main
特別? *
*我搜索了它,但沒有發現任何明顯的啓發爲止;有希望的標題Difference between the main goroutine and spawned goroutines of a Go program的SO問題要求完全不同的問題。
編輯:改變了標題,把重點放在主要和「正常」夠程之間的差異
編輯(在Go運行時函數Goexit絆倒後):簡化問題,甚至可以說更集中在主要細節
你是什麼意思,「它怎麼能控制另一個goroutine」,?似乎沒有任何關於其他事情控制權的goroutine的提及。請注意,當程序從main()返回時,整個進程將死亡/退出。 main()幾乎就是「僅僅」一個gouroutine。但它很特別,因爲當然這是整個程序執行開始的地方(除了正在運行的任何init()函數),並且當main()結束時,進程就會死亡。 – nos
@nos我試圖澄清這個問題,如果它簡直是糟糕的英語,請幫助我的非母語。 – Wolf
@nos *'......幾乎「只是」一個美好的回憶。但是,這是特別的,因爲...... *正是我所要求的(你能否更詳細地解釋這一點?)。幻燈片中的第一個例子顯示了主要和另一個goroutine之間的通道。我對更多細節感興趣,因爲我將它與Windows中的線程進行了比較(其中每個線程相當於我可以保持進程運行,但每個線程都可以退出進程)。 (我已經知道:goroutines不是線程,但通過比較,我希望更好地理解這個概念) – Wolf