Rumah > Artikel > pembangunan bahagian belakang > Amalan pengaturcaraan serentak tinggi Golang: menggunakan Goroutines untuk mencapai pengoptimuman prestasi
Amalan pengaturcaraan konkurensi tinggi Golang: menggunakan Goroutines untuk mencapai pengoptimuman prestasi
Pengenalan:
Dalam pembangunan perisian hari ini, konkurensi tinggi telah menjadi topik yang sangat penting. Dengan pembangunan aplikasi Internet dan peningkatan dalam lawatan pengguna, ia telah menjadi standard untuk mengendalikan sejumlah besar permintaan serentak pada masa yang sama. Sebagai tindak balas kepada keperluan sedemikian, Golang, sebagai bahasa yang cekap, ringkas dengan prestasi serentak yang sangat baik, secara semula jadi telah menjadi pilihan pertama pembangun.
Artikel ini akan menumpukan pada pengaturcaraan serentak tinggi Golang dan memperkenalkan pengalaman praktikal tentang cara menggunakan Goroutines untuk mencapai pengoptimuman prestasi. Melalui contoh kod, kami akan menunjukkan langkah demi langkah cara menggunakan Goroutines untuk meningkatkan daya pemprosesan dan kelajuan tindak balas program.
1. Perbezaan antara concurrency dan parallelism
Sebelum kita bermula, mari kita semak semula konsep concurrency dan parallelism. Concurrency merujuk kepada dua atau lebih peristiwa yang berlaku dalam tempoh masa yang sama, tetapi tidak semestinya serentak. Paralelisme merujuk kepada dua atau lebih peristiwa yang berlaku pada satu masa yang sama. Dalam erti kata lain, concurrency ialah perlaksanaan bergantian bagi berbilang peristiwa dalam satu tempoh masa, manakala paralelisme ialah pelaksanaan serentak berbilang peristiwa pada masa yang sama.
Golang melaksanakan pengaturcaraan konkurensi tinggi melalui Goroutine dan Saluran. Goroutine ialah benang ringan yang lebih murah untuk dibuat dan dimusnahkan daripada benang sistem. Saluran ialah mekanisme untuk komunikasi antara Goroutines, yang boleh memindahkan data dengan selamat antara berbilang Goroutines.
2. Contoh kod: Mengira Jujukan Fibonacci
Kami menggunakan contoh mudah untuk menunjukkan cara menggunakan Goroutines untuk mencapai pengoptimuman prestasi. Kami akan menulis program yang mengira nombor ke-N bagi jujukan Fibonacci. . . jujukan Fibonacci. Untuk membandingkan dengan pengiraan selari, kami mula-mula menggunakan kaedah bersiri untuk mengira jujukan Fibonacci dan mengeluarkan keputusan pengiraan dan masa pelaksanaan.
Seterusnya, kami mentakrifkan fungsi fibonacciParallel dan menggunakan Goroutines untuk melaksanakan pengkomputeran selari. Kami mencipta Saluran ch dan menghantar hasil pengiraan fungsi fibonacci ke ch. Dalam fungsi utama, kita memperoleh hasil pengiraan selari dengan menerima data daripada ch.
3. Hasil larian
Dengan melaksanakan kod contoh di atas, kita boleh mendapatkan hasil larian berikut: Siri: Keputusan: 165580141, Masa diambil: 10.382535msSejajar: Keputusan: 141.580:141,580. Oleh membandingkan kami Dapat dilihat bahawa keputusan yang diperoleh dengan pengiraan selari adalah konsisten dengan keputusan pengiraan bersiri. Pada masa yang sama, kita perhatikan bahawa masa pengiraan selari adalah hampir sama dengan pengiraan bersiri. Ini kerana kami masih menggunakan kaedah bersiri semasa mendapatkan hasil pengiraan selari.
Untuk benar-benar menggunakan Goroutines untuk mencapai pengoptimuman prestasi, kita perlu melaraskan kaedah pengkomputeran selari. Kita boleh menggunakan kumpulan tunggu untuk menunggu semua Goroutine menyelesaikan pengiraan sebelum mendapat keputusan.
pakej utama
import (
"fmt" "time"
)
if n <= 2 { return 1 } return fibonacci(n-1) + fibonacci(n-2)", resultParallel, elapsed)
}
func FibonacciParallel(n int) int }🜎 through the above optimization , Kami menggunakan WaitGroup dalam pakej penyegerakan untuk menunggu penyiapan semua Goroutine Dalam fungsi fibonacciParallel, kami menggunakan fungsi tanpa nama dan menangguhkan untuk memastikan sumber dikeluarkan dengan betul apabila fungsi keluar
5. kod, kita boleh mendapatkan hasil larian berikut:
Sejajar: Keputusan: 165580141, Masa diambil: 10.343731ms
Kesimpulan:
Atas ialah kandungan terperinci Amalan pengaturcaraan serentak tinggi Golang: menggunakan Goroutines untuk mencapai pengoptimuman prestasi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!