iT邦幫忙

DAY 20
0

蠻可愛的 Golang系列 第 20

goroutine之間的切換

昨天玉面飛鷹受傷,今天請月光刑警上場協助.

來看今天的演出陣容:

// hello73
package main

import (
	"fmt"
	"sync"
)

var wg sync.WaitGroup

func main() {
	wg.Add(2)
	fmt.Println("Main():建立兩個Goroutine")
	go 油達大師()
	go 月光刑警()
	wg.Wait()
	fmt.Println("Main():演出完畢")
}

func 油達大師() {
	defer wg.Done()
next:
	for i := 1; i < 5000; i++ {
		for j := 2; j < i; j++ {
			if i%j == 0 {
				continue next
			}
		}
		fmt.Printf("油達大師:砍 #%d\n", i)
	}
	fmt.Println("油達大師:砍好了!")
}

func 月光刑警() {
	defer wg.Done()
next:
	for i := 1; i < 5000; i++ {
		for j := 2; j < i; j++ {
			if i%j == 0 {
				continue next
			}
		}
		fmt.Printf("月光刑警:飛 #%d\n", i)
	}
	fmt.Println("月光刑警:溜!")
}

執行過程:

Main():建立兩個Goroutine
油達大師:砍 #1
...
油達大師:砍 #3673
月光刑警:飛 #1
月光刑警:飛 #2
月光刑警:飛 #3
...
月光刑警:飛 #4421
油達大師:砍 #3677
...
油達大師:砍 #4999
油達大師:砍好了!
月光刑警:飛 #4423
...
月光刑警:飛 #4999
月光刑警:溜!
Main():演出完畢

可以看到golang的排程器,在油達大師與月光刑警兩個goroutine之間切換.


上一篇
sync package
下一篇
Race Condition
系列文
蠻可愛的 Golang30

尚未有邦友留言

立即登入留言