Rumah >pembangunan bahagian belakang >Golang >Mengapakah `time.Sleep` Mendayakan Pelaksanaan Goroutine Serentak dalam Go?

Mengapakah `time.Sleep` Mendayakan Pelaksanaan Goroutine Serentak dalam Go?

Susan Sarandon
Susan Sarandonasal
2024-12-05 15:40:10602semak imbas

Why Does `time.Sleep` Enable Concurrent Goroutine Execution in Go?

Masa. Tidur dan Pelaksanaan Goroutine

Dalam kod yang disediakan, fungsi time.Sleep memainkan peranan penting dalam membolehkan pelaksanaan goroutin serentak. Apabila time.Sleep diulas, goroutine "dunia" tidak pernah berpeluang untuk berlari.

Sebab bagi tingkah laku ini terletak pada sifat bukan preemptif penjadual goroutine Go. Tidak seperti penjadual preemptive, penjadual Go tidak memaksa gorout yang sedang berjalan untuk menghasilkan kawalan melainkan mereka melepaskannya secara sukarela. Tanpa masa. Tidur, goroutine utama memonopoli kawalan, melengkapkan gelung sebut("hello") lima kali sebelum kembali. Memandangkan goroutine utama bertanggungjawab ke atas pelaksanaan program, program tersebut akan keluar serta-merta selepas itu, tanpa meninggalkan masa untuk goroutine "dunia" untuk dilaksanakan.

Dengan masa.Tidur di tempatnya, goroutine "dunia" boleh berjalan sementara goroutine utama sedang menunggu. Apabila goroutine utama menghasilkan kawalan untuk melaksanakan masa. Tidur, penjadual boleh bertukar kepada goroutine "dunia", membenarkannya melaksanakan lelaran pertamanya sebelum goroutine utama disambung semula. Pergantian kawalan antara gorouti ini memastikan kedua-dua tugasan dapat diselesaikan, menghasilkan output yang diharapkan dengan "dunia" dan "hello" dicetak ke skrin secara bergantian.

Atas ialah kandungan terperinci Mengapakah `time.Sleep` Mendayakan Pelaksanaan Goroutine Serentak dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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