Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Tamat Masa Go Playground Semasa Menjalankan Kod Yang Sama pada Mesin Tempatan?

Mengapa Tamat Masa Go Playground Semasa Menjalankan Kod Yang Sama pada Mesin Tempatan?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-23 23:25:29434semak imbas

Why Does the Go Playground Timeout While Running the Same Code on a Local Machine?

Percanggahan Antara Go Playground dan Go on Your Machine: Goroutine Execution

Untuk menyelesaikan kekeliruan mengenai pelaksanaan Goroutine, coretan kod telah dilaksanakan pada kedua-duanya Go Playground dan mesin tempatan. Taman Permainan menghasilkan ralat "Proses mengambil masa terlalu lama," mencadangkan penciptaan Goroutine yang berjalan secara berterusan, manakala mesin tempatan menghasilkan output hampir serta-merta. Ini menimbulkan persoalan sama ada fungsi Goroutine dalam other() terkeluar apabila Goroutine utama selesai atau terus berjalan di latar belakang.

Penjelasan

Taman Permainan On the Go , GOMAXPROCS ditetapkan kepada 1. Ini menunjukkan bahawa hanya satu Goroutine dilaksanakan pada satu masa. Tanpa menyekat, penjadual tidak akan bertukar kepada Goroutine lain.

Dalam kod, Goroutine utama bermula dan menyekat pada saluran yang telah selesai. Penjadual mesti bertukar kepada yang lain() Goroutine, yang menghantar nilai pada saluran selesai, menjadikan kedua-dua Goroutines boleh dijalankan. Penjadual memilih untuk terus melaksanakan other(). Memandangkan GOMAXPROCS ialah 1, Goroutine utama kekal disekat.

other() kemudian melancarkan Goroutine gelung tak terhingga. Goroutine ini terus berjalan, menghalang Goroutine utama daripada menyambung semula. Akibatnya, tamat masa Taman Permainan berlaku.

Secara tempatan, GOMAXPROCS biasanya melebihi 1. Akibatnya, semasa gelung tak terhingga Goroutine sedang berjalan, Goroutine lain (kemungkinan Goroutine utama) dilaksanakan serentak. Apabila Goroutine utama kembali, program ditamatkan, kerana ia tidak menunggu penyiapan Goroutine bukan utama yang lain.

Go Playground Modification

Dengan menetapkan GOMAXPROCS secara eksplisit kepada 1 di Go Playground, adalah mungkin untuk menghasilkan semula tingkah laku "Proses mengambil masa terlalu lama". Sebaliknya, menetapkan GOMAXPROCS kepada nilai yang lebih tinggi, seperti 2, selalunya akan menghasilkan perintah pelaksanaan yang berbeza dan penamatan yang berjaya tanpa tamat masa.

Atas ialah kandungan terperinci Mengapa Tamat Masa Go Playground Semasa Menjalankan Kod Yang Sama pada Mesin Tempatan?. 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