Setelah (singkat) meninjau Pergi bahasa spec, efektif Pergi, dan Pergi model memori, I'm masih kurang mengerti bagaimana saluran Pergi bekerja di bawah tenda.
Apa jenis struktur yang mereka? Mereka bertindak seperti benang-aman antrian /array.
Apakah pelaksanaannya tergantung pada arsitektur?
File sumber untuk saluran adalah (dari anda pergi source code root) /src/pkg/runtime/chan.pergi.
hchan
adalah pusat data struktur untuk saluran, dengan mengirim dan menerima daftar terkait (memegang pointer untuk mereka goroutine dan data elemen) dan tertutup
bendera. Ada's Kunci
tertanam struktur yang didefinisikan dalam runtime2.pergi dan yang berfungsi sebagai mutex (futex) atau semaphore tergantung pada OS. Penguncian pelaksanaannya di lock_futex.pergi (Linux/Capung/Beberapa BSD) atau lock_sema.pergi (Windows/OSX/Plan9/Beberapa BSD), didasarkan pada membangun kategori.
Saluran operasi adalah semua dilaksanakan dalam chan.pergi ke file, sehingga anda dapat melihat makechan, mengirim dan menerima operasi, serta memilih membangun, dekat, len dan topi built-in.
Untuk penjelasan yang mendalam tentang inner saluran, anda harus membaca Go saluran pada steroid oleh Dmitry Vyukov sendiri (Pergi core dev, goroutines, scheduler dan saluran di antara hal-hal lain).
Berikut ini adalah bicara yang baik yang menggambarkan kira-kira bagaimana saluran yang dilaksanakan:
Berbicara deskripsi:
GopherCon 2017: Kavya Joshi - Pengertian Saluran
Saluran menyediakan mekanisme sederhana untuk goroutines untuk berkomunikasi, dan konstruk yang kuat untuk membangun canggih concurrency pola. Kami akan menyelidiki cara kerja di dalam saluran-saluran dan saluran operasi, termasuk bagaimana mereka're didukung oleh runtime scheduler dan manajemen memori sistem.