Bahasa Go ialah bahasa pengaturcaraan yang semakin popular dan dikenali sebagai "bahasa C era baharu". Sebagai bahasa yang agak muda, ia adalah inovatif dalam banyak cara. Yang paling mewakili ialah Goroutine dan Channel, yang memberikan prestasi serentak yang sangat tinggi untuk bahasa Go, menjadikannya bahasa pilihan dalam pengkomputeran awan dan bidang lain.
Berbanding dengan bahasa lain, keistimewaan Goroutine ialah ia bukan benang atau proses, tetapi benang ringan berdasarkan coroutine. Goroutine dicipta dan dimusnahkan dengan sangat cepat dan boleh melaksanakan tugas serentak dengan lebih cekap Oleh itu, Goroutine juga merupakan teras mekanisme konkurensi bahasa Go. Walau bagaimanapun, terdapat fakta yang sangat istimewa di sini, iaitu, Goroutine tidak mempunyai timbunan panggilan bebasnya sendiri seperti benang lain.
Dalam model pengaturcaraan berbilang benang tradisional, setiap rangkaian mempunyai susunan panggilan bebasnya sendiri, yang digunakan untuk menyimpan maklumat seperti parameter fungsi, pembolehubah setempat dan alamat pemulangan panggilan fungsi panggilan tamat, , bingkai tindanan akan muncul, dan kawalan akan kembali ke bingkai tindanan pemanggil untuk dilaksanakan. Berbanding dengan utas tradisional, Goroutine sangat memudahkan kerumitan tindanan panggilan kerana ia tidak mempunyai tindanan panggilan bebasnya sendiri.
Jadi bagaimanakah Goroutine mengendalikan parameter dan pembolehubah setempat bagi setiap fungsi? Malah, bahasa Go menyimpan setiap parameter Goroutine dan pembolehubah setempat dengan memperuntukkan memori pada timbunan. Dalam erti kata lain, setiap Goroutine akan mempunyai ingatan sendiri, termasuk parameter fungsi, pembolehubah tempatan dan maklumat lain. Memandangkan kenangan ini diperuntukkan pada timbunan, ia boleh diakses oleh Goroutine lain dan boleh dituntut semula oleh pemungut sampah.
Dalam bahasa Go, ruang tindanan setiap Goroutine ditetapkan, 2KB secara lalai Anda boleh mengubah suai saiz ruang tindanan bagi setiap Goroutine melalui fungsi runtime.GOMAXPROCS(). Pada masa yang sama, bahasa Go juga menyediakan beberapa alat lanjutan untuk mengoptimumkan penggunaan tindanan, seperti analisis melarikan diri, iaitu teknologi yang mengoptimumkan penggunaan memori pada peringkat pengkompil.
Analisis melarikan diri boleh mengesan pada masa penyusunan pembolehubah yang tidak perlu melalui timbunan untuk memperuntukkan memori, dengan itu memutuskan sama ada pembolehubah harus diletakkan pada timbunan atau pada timbunan, yang boleh mengurangkan overhed memori dan meningkatkan prestasi program. Selain itu, bahasa Go juga menyediakan kaedah yang dipanggil "slice shared underlying array" untuk mengelakkan peruntukan memori berulang semasa panggilan fungsi. Ini adalah teknik yang sangat halus yang boleh mengurangkan peruntukan memori dan menyalin serta meningkatkan prestasi program.
Walaupun Goroutine tidak mempunyai timbunan panggilan bebas, ia masih merupakan mekanisme yang sangat berkuasa. Ia boleh dilaksanakan serentak pada berbilang teras CPU, boleh mengelakkan masalah seperti keadaan perlumbaan dan kebuntuan dalam pengaturcaraan berbilang benang, dan mempunyai kebolehskalaan yang lebih baik daripada benang tradisional. Pada masa yang sama, kesederhanaan dan kemudahan penggunaan Goroutine juga merupakan salah satu sebab mengapa bahasa Go popular.
Secara umumnya, Goroutine ialah mekanisme konkurensi yang sangat baik dan unik Walaupun ia tidak mempunyai timbunan panggilan bebasnya sendiri, ia mempunyai prestasi tinggi dan kebolehskalaan. Pengenalan Goroutine telah mempertingkatkan keupayaan concurrency bagi bahasa Go, menjadikannya bahasa pilihan pertama untuk menulis program serentak yang cekap.
Atas ialah kandungan terperinci Adakah golang tiada timbunan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!