Go的非同步主要是由協程(goroutine)實現的。協程相對於執行緒來說,佔用的記憶體更少,更輕量級,這也是Go在效能上的優勢。
非同步是相對於同步來說的,下面透過程式碼的執行順序說明一下。
1.同步是按照順序執行的。
上面的程式碼會輸出:
第一步
第二步
第三步
2.非同步在執行時,不是順序執行的,非同步程式碼有時會被直接跳過。
要讓上面的非同步程式碼都執行,可以這樣修改一下:
在第九行,新增
time.Sleep
以上是我的一些理解,希望可以幫到你。
Go的非同步主要是由協程(goroutine)實現的。協程相對於執行緒來說,佔用的記憶體更少,更輕量級,這也是Go在效能上的優勢。
非同步是相對於同步來說的,下面透過程式碼的執行順序說明一下。
1.同步是按照順序執行的。
上面的程式碼會輸出:
第一步
第二步
第三步
2.非同步在執行時,不是順序執行的,非同步程式碼有時會被直接跳過。
上面的程式碼會輸出:
第一步
第三步
要讓上面的非同步程式碼都執行,可以這樣修改一下:
在第九行,新增
time.Sleep
方法,字面意思是先睡1s,實際上是Go的排程程式,先暫停執行當前的協程(即main)一秒鐘,在這個時間內排程程式會搜尋看一下,是否有其他的協程未執行,如果有,會先執行它。在它執行完之後,再回到之前的協程,繼續執行下去。所以最後會輸出:第一步
第三步
第二步
以上是我的一些理解,希望可以幫到你。