Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Amalan pengaturcaraan serentak tinggi Golang: menggunakan Goroutines untuk mencapai pengoptimuman prestasi

Amalan pengaturcaraan serentak tinggi Golang: menggunakan Goroutines untuk mencapai pengoptimuman prestasi

WBOY
WBOYasal
2023-07-17 18:03:121612semak imbas

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.382535ms

Sejajar: 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.

4. Pengoptimuman Pengkomputeran 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"

)

func main() {

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

Anda boleh melihat bahawa masa pengiraan selari yang dioptimumkan hampir sama dengan masa pengiraan bersiri sebelumnya mencipta dan memusnahkan Goroutines adalah sangat kecil, jadi masa yang diperlukan untuk pengkomputeran selari tidak meningkat dengan ketara Namun, melalui pengkomputeran selari, kita boleh mendapat peningkatan yang besar dalam prestasi


Kesimpulan:

Artikel ini memperkenalkannya melalui contoh kod untuk menggunakan Goroutines untuk melaksanakan pengaturcaraan konkurensi tinggi di Golang Melalui Goroutines dan Saluran, kami boleh melaksanakan pengkomputeran selari dengan mudah, dengan itu meningkatkan daya pemprosesan dan kelajuan tindak balas program Pada masa yang sama, kami juga memperkenalkan cara menggunakan kumpulan tunggu untuk mengoptimumkan pengkomputeran selari .

Dalam pembangunan aplikasi sebenar, kami boleh mengoptimumkan lagi kaedah pengkomputeran serentak mengikut keperluan dan senario sebenar Dengan menggunakan sepenuhnya ciri konkurensi tinggi Golang, kami boleh meningkatkan prestasi dan kebolehskalaan sistem dan menyediakan pengguna dengan. perkhidmatan yang lebih baik. Saya harap artikel ini dapat memberi inspirasi dan membimbing anda untuk menggunakan sepenuhnya Goroutines untuk pengaturcaraan yang tinggi dalam projek sebenar

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!

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