Home | Back
การทดลองใช้ Goroutine และ Channel ใน Golang
Sunday, 29 November 2015
วันนี้ผมได้ทดลองเกี่ยวกับความสามารถด้าน Concurrency ในภาษา Golang ที่ออกแบบการทำงานในลักษณะคล้าย ๆ Thread แต่มีความง่ายและเบากว่า Thread ปกติ ที่เรียกว่า Goroutine และมีการสื่อสารกันผ่านสิ่งที่เรียกว่า Channel ผมเลยตั้งโจทย์ให้สร้าง Goroutine ขึ้นมาซัก 10 Goroutine ให้ผลิตข้อมูลตัวเลข 0 - 999 แบบสุ่ม แล้วส่งให้โปรแกรมหลักนำมาแสดงผล ซึ่ง code โปรแกรมมีดังนี้ครับ
File : test.go
package main
import (
"fmt"
"time"
"math/rand"
)
type pack struct {
n int
data int
}
func init() {
rand.Seed(time.Now().Unix())
}
func p(n int,c chan *pack) {
for {
data := new(pack)
data.n = n
data.data = rand.Intn(1000)
c <- data
time.Sleep(time.Duration(rand.Intn(3000)) * time.Millisecond)
}
}
func main() {
c := make(chan *pack)
i := 0
for i < 10 {
go p(i,c)
i++
}
for {
data := <- c
fmt.Printf("%d - %03d\n",data.n, data.data)
}
}
หลังจาก compile แล้วผลเป็นอย่างไร ก็ไปทดลองกันเอาเองนะครับ อิอิอิอิ