Pemprosesan Selari di Golang: Memanfaatkan Keselarasan untuk Prestasi
Pertimbangkan kod yang disediakan, yang mempamerkan pemprosesan selari dengan goroutin. Walau bagaimanapun, ia menimbulkan persoalan tentang potensi pelaksanaan serentak dan pendekatan optimum untuk mencapai keselarian.
Pelaksanaan Kerja Serentak
Premis bahawa dowork akan dilaksanakan secara selari ialah tidak dijamin. Walaupun goroutine menyediakan mekanisme konkurensi yang ringan, penjadual OS menentukan urutan pelaksanaan sebenar. GOMAXPROCS, mengikut nota keluaran Go 1.5, lazimnya sejajar dengan teras yang tersedia.
Pendekatan Cadangan: Pencegahan Kebuntuan dan Kawalan Konkurensi
Mengenai pengekalan pelaksanaan fungsi utama , fmt.Scanln boleh menjadi tidak boleh dipercayai, terutamanya dalam persekitaran pengeluaran. Sebaliknya, pertimbangkan untuk melaksanakan penyegerakan.WaitGroup untuk memastikan semua gorout selesai sebelum keluar. Selain itu, untuk meningkatkan kawalan serentak dan memastikan penggunaan sumber yang betul untuk tugasan selari, adalah disyorkan untuk menggunakan saluran pekerja kerja yang berasingan untuk setiap goroutine.
Fungsi Utiliti untuk Pelaksanaan Fungsi Selari
Untuk memudahkan pelaksanaan fungsi selari, seseorang boleh memanfaatkan fungsi utiliti sedia ada seperti berikut:
<code class="go">import "sync" // Parallelize parallelizes function calls func Parallelize(functions ...func()) { var waitGroup sync.WaitGroup waitGroup.Add(len(functions)) defer waitGroup.Wait() for _, function := range functions { go func(f func()) { defer waitGroup.Done() f() }(function) } }</code>
Menggunakan fungsi ini pada coretan kod:
<code class="go">func1 := func() { f(0) } func2 := func() { f(1) } func3 := func() { f(2) } Parallelize(func1, func2, func3)</code>
Atas ialah kandungan terperinci Bagaimana untuk Mencapai Keselarian Sebenar di Golang: Goroutine, Kebuntuan dan Saluran?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!