Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah `time.Sleep()` Menghalang Kebuluran Goroutine dalam Pergi?

Bagaimanakah `time.Sleep()` Menghalang Kebuluran Goroutine dalam Pergi?

Susan Sarandon
Lepaskan: 2024-12-03 09:42:10
asal
333 orang telah melayarinya

How Does `time.Sleep()` Prevent Goroutine Starvation in Go?

Memahami Peranan masa.sleep in Goroutine Execution

Dalam Go, goroutine ringan secara serentak melaksanakan utas. Semasa menggabungkan goroutine dengan komunikasi saluran menyediakan primitif konkurensi yang mantap, senario tertentu memerlukan penggunaan fungsi menyekat seperti time.sleep untuk mengelakkan kebuluran dan memastikan keadilan dalam pelaksanaan.

Pertimbangkan coretan kod berikut daripada tutorial Go:

package main

import (
    "fmt"
    "time"
)

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")
}
Salin selepas log masuk

Apabila dilaksanakan, kod ini mencetak "hello" dan "dunia" secara bergantian pada skrin lima kali. Walau bagaimanapun, jika time.Sleep diulas, hanya "hello" akan dicetak. Tingkah laku ini menyerlahkan kepentingan masa. Tidur dalam pelaksanaan goroutine.

Penjadual masa jalan Go bukan preemptif. Ini bermakna gorouti mesti secara sukarela melepaskan kawalan untuk membolehkan gorouti lain dilaksanakan. Satu cara untuk melepaskan kawalan ialah menggunakan masa.Sleep.

Dalam coretan kod di atas, jika masa.Sleep dialih keluar, goroutine "hello" akan berjalan selama lima lelaran tanpa memberi sebarang peluang kepada goroutine "dunia" untuk melaksanakan. Akibatnya, apabila goroutine "hello" tamat, program ini ditamatkan kerana ketiadaan sebarang goroutine lain yang mengekalkannya.

Oleh itu, masa.Tidur memainkan peranan penting dalam memastikan keadilan dalam penjadualan goroutine. Dengan memperkenalkan kelewatan singkat ke dalam pelaksanaan goroutin tertentu, ia membolehkan goroutin lain dilaksanakan dan menghalang kebuluran atau kebuluran lengkap gorouti lain.

Atas ialah kandungan terperinci Bagaimanakah `time.Sleep()` Menghalang Kebuluran Goroutine dalam Pergi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan