


Panduan Pengaturcaraan Serentak: Meneroka Paralelisme dalam Perpustakaan Standard Golang
Panduan Pengaturcaraan Serentak di Perpustakaan Standard Golang
Pengenalan:
Pengaturcaraan serentak ialah cara penting untuk menyelesaikan masalah prestasi program dan mencapai penggunaan sumber pengkomputeran yang cekap. Dalam bahasa pengaturcaraan Golang, pelbagai alatan dan kaedah pengaturcaraan serentak disediakan. Artikel ini akan memperkenalkan beberapa teknik pengaturcaraan serentak biasa dalam pustaka standard Golang, dan menggambarkan penggunaan dan langkah berjaga-jaganya melalui contoh kod tertentu.
- Goroutine (Coroutine)
Goroutine ialah benang ringan di Golang, dimulakan dengan kata kunci Go. Melalui Goroutine, kami boleh melaksanakan berbilang tugas pada masa yang sama dalam program untuk mencapai kesan pelaksanaan serentak yang tinggi. Berikut ialah contoh mudah Goroutine:
package main import ( "fmt" "time" ) func printNumbers() { for i := 0; i < 5; i++ { fmt.Printf("%d ", i) time.Sleep(time.Millisecond * 500) } } func printLetters() { for i := 'A'; i < 'F'; i++ { fmt.Printf("%c ", i) time.Sleep(time.Millisecond * 500) } } func main() { go printNumbers() // 启动一个Goroutine,打印数字 go printLetters() // 启动另一个Goroutine,打印字母 time.Sleep(time.Second * 3) // 等待两个Goroutine执行完毕 fmt.Println("Done") }
Dalam kod di atas, kami menentukan dua fungsi printNumbers
dan printLetters
masing-masing dan lulus go
Kod> kata kunci memulakannya sebagai dua Goroutine masing-masing. Gunakan fungsi time.Sleep
untuk menunggu dua Goroutine menyelesaikan pelaksanaan Anda boleh melihat bahawa nombor dan huruf dikeluarkan secara bergilir-gilir dalam hasil output. printNumbers
和printLetters
两个函数,并通过go
关键字将它们分别启动为两个Goroutine。通过time.Sleep
函数等待两个Goroutine执行完毕,可以看到输出结果中数字和字母是交替输出的。
- Channel(通道)
在Golang中,Goroutine之间的通信使用Channel(通道)来完成。Channel是一种类型安全的队列,用于在Goroutine之间传递数据。下面是一个简单的Channel示例:
package main import ( "fmt" "time" ) func worker(id int, jobs <-chan int, results chan<- int) { for job := range jobs { fmt.Printf("Worker %d started job %d ", id, job) time.Sleep(time.Second) fmt.Printf("Worker %d finished job %d ", id, job) results <- job * 2 } } func main() { numJobs := 5 jobs := make(chan int, numJobs) results := make(chan int, numJobs) numWorkers := 3 for w := 1; w <= numWorkers; w++ { go worker(w, jobs, results) } for j := 1; j <= numJobs; j++ { jobs <- j } close(jobs) for a := 1; a <= numJobs; a++ { result := <-results fmt.Println("Result:", result) } }
在上述代码中,我们定义了worker
函数,该函数用于接收jobs通道传入的数字,并进行相应的处理,结果通过results通道返回。在主函数中,我们分别创建了jobs和results两个通道,并将jobs通道传递给三个Goroutine执行。然后,通过for循环向jobs通道发送5个作业,并关闭通道。最后,通过for循环接收results通道的返回结果并输出。
- WaitGroup(等待组)
在并发编程中,经常需要等待多个Goroutine的全部执行完成后再进行下一步的操作。Golang中的sync
包提供了WaitGroup类型来实现这个功能。下面是一个使用WaitGroup的示例:
package main import ( "fmt" "sync" "time" ) func worker(id int, wg *sync.WaitGroup) { defer wg.Done() fmt.Printf("Worker %d starting ", id) time.Sleep(time.Second) fmt.Printf("Worker %d done ", id) } func main() { var wg sync.WaitGroup numWorkers := 3 wg.Add(numWorkers) for w := 1; w <= numWorkers; w++ { go worker(w, &wg) } wg.Wait() fmt.Println("All workers done") }
在上述代码中,我们定义了worker
函数,该函数接收一个WaitGroup参数,执行相应的任务,并在任务执行完成后通过Done
方法通知WaitGroup。在主函数中,我们创建了一个WaitGroup变量,并通过Add
方法指定需要等待的Goroutine数量。然后,使用go
关键字启动相应数量的Goroutine,并将WaitGroup指针传递给每个Goroutine。最后,通过Wait
- Saluran
Di Golang, komunikasi antara Goroutines diselesaikan menggunakan Saluran. Saluran ialah baris gilir selamat jenis yang digunakan untuk menghantar data antara Goroutines. Berikut ialah contoh Saluran mudah:
worker
, yang digunakan untuk menerima nombor yang dihantar oleh saluran kerja dan memprosesnya dengan sewajarnya lulus Keputusan saluran pulangan. Dalam fungsi utama, kami mencipta dua saluran, pekerjaan dan hasil, masing-masing, dan menyerahkan saluran pekerjaan kepada tiga Goroutine untuk dilaksanakan. Kemudian, hantar 5 kerja ke saluran kerja melalui gelung untuk dan tutup saluran. Akhir sekali, hasil pulangan saluran hasil diterima melalui gelung untuk dan keluaran. 🎜- 🎜WaitGroup (kumpulan menunggu)🎜Dalam pengaturcaraan serentak, selalunya perlu menunggu untuk selesai semua pelaksanaan berbilang Goroutine sebelum meneruskan ke langkah seterusnya. Pakej
sync
dalam Golang menyediakan jenis WaitGroup untuk melaksanakan fungsi ini. Berikut ialah contoh penggunaan WaitGroup: 🎜🎜rrreee🎜Dalam kod di atas, kami mentakrifkan fungsi worker
, yang menerima parameter WaitGroup, melaksanakan tugas yang sepadan dan lulus Done memberitahu WaitGroup. Dalam fungsi utama, kami mencipta pembolehubah WaitGroup dan menentukan bilangan Goroutine untuk menunggu melalui kaedah Tambah
. Kemudian, gunakan kata kunci go
untuk memulakan bilangan Goroutine yang sepadan dan hantar penuding WaitGroup kepada setiap Goroutine. Akhir sekali, tunggu sehingga semua pelaksanaan Goroutine selesai melalui kaedah Tunggu
. 🎜🎜Ringkasan: 🎜Melalui alatan dan kaedah pengaturcaraan serentak yang disediakan dalam perpustakaan standard Golang, kami boleh melaksanakan program konkurensi tinggi dengan mudah. Artikel ini memperkenalkan teknik pengaturcaraan serentak biasa seperti Goroutine, Channel dan WaitGroup, dan menggambarkannya dengan contoh kod khusus. Saya berharap pembaca dapat menguasai kemahiran pengaturcaraan serentak di Golang dengan lebih baik dan meningkatkan prestasi dan kecekapan pengendalian program melalui kajian artikel ini. 🎜Atas ialah kandungan terperinci Panduan Pengaturcaraan Serentak: Meneroka Paralelisme dalam Perpustakaan Standard Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Membaca dan menulis fail dengan selamat dalam Go adalah penting. Garis panduan termasuk: Menyemak kebenaran fail Menutup fail menggunakan tangguh Mengesahkan laluan fail Menggunakan tamat masa konteks Mengikuti garis panduan ini memastikan keselamatan data anda dan keteguhan aplikasi anda.

Tiada fungsi yang dinamakan "SUM" dalam Perpustakaan Standard Bahasa C. "Jumlah" biasanya ditakrifkan oleh pengaturcara atau disediakan dalam perpustakaan tertentu, dan fungsinya bergantung kepada pelaksanaan tertentu. Senario biasa dijumlahkan untuk tatasusunan, dan juga boleh digunakan dalam struktur data lain, seperti senarai yang dipautkan. Di samping itu, "jumlah" juga digunakan dalam bidang seperti pemprosesan imej dan analisis statistik. Fungsi "jumlah" yang sangat baik harus mempunyai kebolehbacaan, ketahanan dan kecekapan yang baik.

Multithreading dalam bahasa dapat meningkatkan kecekapan program. Terdapat empat cara utama untuk melaksanakan multithreading dalam bahasa C: Buat proses bebas: Buat pelbagai proses berjalan secara bebas, setiap proses mempunyai ruang ingatan sendiri. Pseudo-Multithreading: Buat pelbagai aliran pelaksanaan dalam proses yang berkongsi ruang memori yang sama dan laksanakan secara bergantian. Perpustakaan multi-threaded: Gunakan perpustakaan berbilang threaded seperti PTHREADS untuk membuat dan mengurus benang, menyediakan fungsi operasi benang yang kaya. Coroutine: Pelaksanaan pelbagai threaded ringan yang membahagikan tugas menjadi subtask kecil dan melaksanakannya pada gilirannya.

Laluan Pembelajaran Backend: Perjalanan Eksplorasi dari Front-End ke Back-End sebagai pemula back-end yang berubah dari pembangunan front-end, anda sudah mempunyai asas Nodejs, ...

Menggunakan zon waktu yang dipratentukan dalam Go termasuk langkah berikut: Import pakej "masa". Muatkan zon waktu tertentu melalui fungsi LoadLocation. Gunakan zon waktu yang dimuatkan dalam operasi seperti mencipta objek Masa, menghuraikan rentetan masa dan melaksanakan penukaran tarikh dan masa. Bandingkan tarikh menggunakan zon waktu yang berbeza untuk menggambarkan aplikasi ciri zon waktu yang telah ditetapkan.

Pergi bahasa berfungsi dengan baik dalam membina sistem yang cekap dan berskala. Kelebihannya termasuk: 1. Prestasi Tinggi: Disusun ke dalam Kod Mesin, Kelajuan Berjalan Cepat; 2. Pengaturcaraan serentak: Memudahkan multitasking melalui goroutine dan saluran; 3. Kesederhanaan: sintaks ringkas, mengurangkan kos pembelajaran dan penyelenggaraan; 4. Cross-Platform: Menyokong kompilasi silang platform, penggunaan mudah.

Perpustakaan mana yang dibangunkan oleh syarikat besar atau projek sumber terbuka yang terkenal? Semasa pengaturcaraan di GO, pemaju sering menghadapi beberapa keperluan biasa, ...

STD :: Unik menghilangkan elemen pendua bersebelahan di dalam bekas dan menggerakkannya ke akhir, mengembalikan iterator yang menunjuk ke elemen pendua pertama. STD :: Jarak mengira jarak antara dua iterators, iaitu bilangan elemen yang mereka maksudkan. Kedua -dua fungsi ini berguna untuk mengoptimumkan kod dan meningkatkan kecekapan, tetapi terdapat juga beberapa perangkap yang perlu diberi perhatian, seperti: STD :: Unik hanya berkaitan dengan unsur -unsur pendua yang bersebelahan. STD :: Jarak kurang cekap apabila berurusan dengan Iterator Akses Bukan Rawak. Dengan menguasai ciri -ciri dan amalan terbaik ini, anda boleh menggunakan sepenuhnya kuasa kedua -dua fungsi ini.
