語学学習ノート9に行く-Goroutine

語学学習ノート9に行く-Goroutine

コルーチンコルーチン

  • 軽量の「スレッド」
  • 非プリエンプティブマルチタスク、コルーチンは積極的に制御を引き渡します
  • コンパイラ/インタプリタ/VMレベルでのマルチタスク
  • 複数のコルーチンが1つ以上のスレッドで実行される場合があります

I / O操作自体には待機プロセスがあり、コルーチンを切り替えます
。Goはゴルーチンを確立し、次の機能を同時に実行します。メインプログラムは引き続き実行され、
メイン自体もゴルーチンです。

func main() {
    
    
	var a [10]int
	fmt.Println(a)
	for i := 0; i < 10; i++ {
    
    
		go func(i int) {
    
    
			for {
    
    
				a[i]++
				runtime.Gosched()//手动交出控制权
			}
		}(i)
	}
	time.Sleep(time.Millisecond)
	fmt.Println(a)
}

コルーチン

サブルーチンは、
ここに画像の説明を挿入
他の言語のコルーチンコルーチンの特殊なケースです

  • C ++:Boost.Coroutine
  • Java:サポートされていません
  • python:yieldキーワードはコルーチンを実装し、python3.5はコルーチンのネイティブサポートに非同期定義を追加します

Goのコルーチン

  • goを追加するだけで、任意の関数をスケジューラーに送信して実行できます
  • 定義時に非同期関数かどうかを区別する必要はありません
  • スケジューラーは適切なポイントで切り替わります
    • 可能なスイッチングポイント
    • I / O、選択
    • チャネル
    • ロックを待っています
    • 関数呼び出し(時々)
    • runtime.Gosched()
    • 参考までに、切り替えの保証はなく、他の場所に切り替えないという保証もありません
  • -raceを使用して、データアクセス違反を検出します
    ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/shn111/article/details/122687381