Mengapa Gelagat Go Goroutine Berbeza Antara Taman Permainan dan Pelaksanaan Tempatan?

DDD
Lepaskan: 2024-10-23 14:35:33
asal
373 orang telah melayarinya

Why Do Go Goroutine Behaviors Differ Between the Playground and Local Execution?

Gelagat Sumbang Antara Go Playground dan Pelaksanaan Mesin Tempatan

Latar Belakang

Dalam cubaan untuk menjelaskan salah faham berkenaan goroutine, seorang pengguna beralih ke Go Playground dan melaksanakan kod berikut:

<code class="go">package main

import (
    "fmt"
)

func other(done chan bool) {
    done <- true
    go func() {
        for {
            fmt.Println("Here")
        }
    }()
}

func main() {
    fmt.Println("Hello, playground")
    done := make(chan bool)
    go other(done)
    <-done
    fmt.Println("Finished.")
}</code>
Salin selepas log masuk

Hasil Diperhatikan

Go Playground:

  • Menghadapi ralat: "Proses mengambil masa terlalu lama ."
  • Menyiratkan bahawa goroutine dalam yang lain berjalan secara berterusan.

Pelaksanaan Tempatan:

  • Hampiran keluaran yang dihasilkan serta-merta:

    Hello, playground.
    Finished.
    Salin selepas log masuk
  • Menunjukkan bahawa goroutine dalam yang lain ditamatkan apabila goroutine utama selesai.

Penjelasan

Pergi Taman Permainan:

  • GOMAXPROCS lalai ditetapkan kepada 1.
  • Hanya satu goroutine dilaksanakan pada satu masa, menghalang pensuisan penjadual apabila goroutin tidak disekat.
  • goroutine utama menyekat semasa menunggu mesej daripada saluran selesai.
  • Groutine dalam yang lain dilaksanakan selama-lamanya, membawa kepada tamat masa.

Pelaksanaan Tempatan:

  • GOMAXPROCS berkemungkinan ditetapkan kepada bilangan teras CPU, biasanya lalai kepada nilai yang lebih besar daripada 1.
  • Penjadual bertukar antara goroutin, membenarkan goroutine utama berkembang walaupun dengan bukan -menyekat goroutine berjalan serentak.
  • Setelah main() keluar, program ditamatkan tanpa menunggu goroutine berjalan selama-lamanya selesai.

Tingkah Laku Bukan Penentu

Ambil perhatian bahawa Go Playground pada masa ini menggunakan versi cache output, jadi larian berikutnya mungkin tidak menggambarkan pelaksanaan sebenar dengan tepat.

Kesimpulan

Memahami kesan GOMAXPROCS pada pelaksanaan goroutine adalah penting untuk mereka bentuk model konkurensi yang sesuai. Tetapan lalai pada Go Playground mungkin tidak selalu meniru gelagat mesin tempatan, menyerlahkan kepentingan ujian di bawah konfigurasi yang berbeza.

Atas ialah kandungan terperinci Mengapa Gelagat Go Goroutine Berbeza Antara Taman Permainan dan Pelaksanaan Tempatan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!