2018年9月1日土曜日

開発環境

  • macOS High Sierra - Apple (OS)
  • Emacs (Text Editor)
  • Go (プログラミング言語)

Introducing Go: Build Reliable, Scalable Programs (Caleb Doxsey (著)、O'Reilly Media)のChapter 10.(Concurrency)、Exercises(No. 1879)3.を取り組んでみる。

コード(Emacs)

package main

import (
 "fmt"
 "time"
)

var max int = 100000000

func send(c chan<- int) {
 for i := 1; i <= max; i += 1 {
  c <- i
 }
}
func receive(secs int64, msg string, c <-chan int) {
 for {
  n := <-c
  if n == max {
   fmt.Println(msg, time.Now().Unix()-secs)
  }
 }
}
func main() {
 // channel
 c1 := make(chan int)
 // buffered channel(a capacity of 20)
 c2 := make(chan int, 20)

 go send(c1)
 go receive(time.Now().Unix(), "channel", c1)

 go send(c2)
 go receive(time.Now().Unix(), "buffered channel", c2)

 var input string
 fmt.Scanln(&input)
}

入出力結果(Terminal)

$ go run sample3.go
buffered channel 7
channel 22

$

同期より非同期の方が速いことを確認できた。

0 コメント:

コメントを投稿