0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Go言語学習】goroutine (ゴルーチン)

Posted at

A Tour of Goでの説明

Goroutines
goroutine (ゴルーチン)は、Goのランタイムに管理される軽量なスレッドです...
https://go-tour-jp.appspot.com/concurrency/1

ザックリとした現状の理解

Goにおける並行処理の機能で、軽量、非同期的に複数のスレッドを容易に実行できる。
共有メモリへのアクセスは同期する必要がある。

動作の現状の理解

main()が終了すると、ゴルーチンも終了する。
論理的なスレッドであるものの、並行処理(Concurrency)と並列処理(Parallelism)の概念がある様で、裏っ側ではCPUにも依存する部分もある模様。
非常に軽量で何百万ものスレッドを同時に使える。

ゴルーチン指向

package main

import (
	"fmt"
	"sync"
	"time"
)

func say(s string, wg *sync.WaitGroup) {
	for i := 0; i < 5; i++ {
		time.Sleep(100 * time.Millisecond)
		fmt.Println(s)
	}
	wg.Done() // 終了したらDoneを呼び出すことで、Addで渡した数字が‐1される
}

func main() {
	var wg sync.WaitGroup // WaitGroupを作成
	wg.Add(2)             // 待つゴルーチンの数を2つ増やす
	go say("world", &wg)  // ゴルーチンを立ち上げ、WaitGroupを渡す
	say("hello", &wg)     // メインゴルーチン?
	wg.Wait()             // 全てのゴルーチンが終了するのを待つ
}

/* A Tour of Goのコード
func say(s string) {
	for i := 0; i < 5; i++ {
		time.Sleep(100 * time.Millisecond)
		fmt.Println(s)
	}
}

func main() {
	go say("world")
	say("hello")
}
*/

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?