Jadual Kandungan
Coroutine
Saluran
WaitGroup
Contoh
Kesimpulan
Rumah pembangunan bahagian belakang Golang Bagaimana untuk menggunakan bahasa Go untuk pengaturcaraan serentak?

Bagaimana untuk menggunakan bahasa Go untuk pengaturcaraan serentak?

Jun 10, 2023 am 10:33 AM
pergi bahasa Pengaturcaraan serentak guna

Dengan pembangunan berterusan perkakasan komputer, teras CPU dalam pemproses tidak lagi meningkatkan kekerapan jam secara individu, tetapi meningkatkan bilangan teras. Ini menimbulkan persoalan yang jelas: Bagaimana untuk memanfaatkan sepenuhnya teras ini?

Satu penyelesaian adalah melalui pengaturcaraan selari, yang melaksanakan pelbagai tugas serentak untuk menggunakan sepenuhnya teras CPU. Ini adalah satu perkara yang unik tentang bahasa Go, ia adalah bahasa yang direka untuk pengaturcaraan serentak.

Dalam artikel ini, kami akan meneroka cara menggunakan bahasa Go untuk pengaturcaraan serentak.

Coroutine

Pertama sekali, perkara yang perlu kita fahami ialah mekanisme khas dalam bahasa Go: coroutine. Coroutine ialah benang ringan yang boleh menukar pelaksanaan beberapa kali dalam satu utas untuk mencapai pelaksanaan selari.

Berbanding dengan rangkaian sistem pengendalian, kos penukaran coroutine adalah sangat rendah. Ia diuruskan oleh masa jalan Go, yang menggunakan pemetaan m:n untuk memetakan coroutine pada n urutan sistem pengendalian. Ini menjadikan bahasa Go sangat cekap dan stabil dalam keupayaan pelaksanaan serentak.

Dalam bahasa Go, anda boleh menggunakan kata kunci go untuk memulakan coroutine. Contohnya:

1

2

3

4

5

6

7

func main() {

    go hello()

}

 

func hello() {

    fmt.Println("Hello, world!")

}

Salin selepas log masuk

Dalam kod di atas, fungsi hello() akan dilaksanakan dalam coroutine baharu. Apabila atur cara keluar daripada fungsi main(), fungsi hello() mungkin masih dilaksanakan, jadi atur cara tidak akan keluar serta-merta.

Saluran

Komunikasi antara coroutine adalah sangat penting kerana mereka perlu berkongsi data. Terdapat jenis pembolehubah khas dalam bahasa Go yang dipanggil saluran, yang digunakan untuk memindahkan data antara coroutine.

Saluran boleh dibuat melalui fungsi make(), contohnya:

1

ch := make(chan int)

Salin selepas log masuk

Kod di atas akan mencipta saluran jenis integer.

Data boleh dihantar melalui operasi hantar dan terima saluran. Saluran boleh dihantar dan diterima menggunakan operator <-. Contohnya: Operator

1

2

ch <- 42 // 发送数据

x := <-ch // 接收数据

Salin selepas log masuk

<- boleh digunakan di sebelah kiri atau kanan untuk menghantar atau menerima data. Jika saluran tidak dibuffer, operasi hantar akan disekat sehingga coroutine lain menerima data. Begitu juga, jika tiada data tersedia, operasi terima akan disekat.

WaitGroup

Apabila memproses berbilang coroutine, anda mungkin perlu menunggu kesemuanya untuk menyelesaikan pelaksanaan. Anda boleh menggunakan sync.WaitGroup untuk tujuan ini. Contohnya:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

func main() {

    var wg sync.WaitGroup

    wg.Add(2) // 增加计数器

 

    go func() {

        defer wg.Done() // 完成时减少计数器

        fmt.Println("Hello,")

    }()

 

    go func() {

        defer wg.Done() // 完成时减少计数器

        fmt.Println("world!")

    }()

 

    wg.Wait() // 等待协程全部完成

}

Salin selepas log masuk

Dalam kod di atas, wg ialah objek sync.WaitGroup yang mengandungi pembilang. Kaedah Add() menambah kaunter, menunjukkan bilangan coroutine yang perlu menunggu. Kaedah Done() mengurangkan kaunter untuk menunjukkan bahawa coroutine telah selesai. Kaedah Wait() akan menunggu sehingga kaunter mencapai sifar.

Contoh

Berikut ialah contoh program yang menunjukkan cara memanfaatkan coroutine dan saluran untuk pengaturcaraan serentak:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

func main() {

    ch := make(chan int)

 

    go func() {

        for i := 0; i < 10; i++ {

            ch <- i // 发送数据

        }

        close(ch) // 关闭通道

    }()

 

    for i := range ch { // 循环接收数据,直到通道关闭

        fmt.Println(i)

    }

}

Salin selepas log masuk

Dalam kod di atas, kami mencipta saluran jenis integer ch. Kami kemudian menghantar integer dari 0 hingga 9 ke saluran dalam coroutine baharu. Akhir sekali, kami menggunakan kata kunci range untuk mengulung data dalam saluran dan mencetaknya.

Perhatikan bahawa kami menutup saluran melalui kaedah close() selepas menghantar semua data. Ini membolehkan coroutine yang menggelung membaca saluran untuk keluar.

Kesimpulan

Dalam artikel ini, kami mempelajari tentang coroutine, saluran dan WaitGroup dalam bahasa Go. Melalui mekanisme ini, pengaturcaraan serentak yang cekap boleh dilaksanakan dengan mudah. Semasa menulis kod Go, pastikan anda mempertimbangkan untuk menggunakan mekanisme ini untuk menggunakan sepenuhnya teras CPU dan sumber perkakasan.

Atas ialah kandungan terperinci Bagaimana untuk menggunakan bahasa Go untuk pengaturcaraan serentak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Reka bentuk struktur data selamat konkurensi dalam pengaturcaraan serentak C++? Reka bentuk struktur data selamat konkurensi dalam pengaturcaraan serentak C++? Jun 05, 2024 am 11:00 AM

Dalam pengaturcaraan serentak C++, reka bentuk struktur data yang selamat serentak adalah penting: Bahagian kritikal: Gunakan kunci mutex untuk mencipta blok kod yang membenarkan hanya satu utas untuk dilaksanakan pada masa yang sama. Kunci baca-tulis: membenarkan beberapa utas dibaca pada masa yang sama, tetapi hanya satu utas untuk ditulis pada masa yang sama. Struktur data tanpa kunci: Gunakan operasi atom untuk mencapai keselamatan serentak tanpa kunci. Kes praktikal: Barisan selamat benang: Gunakan bahagian kritikal untuk melindungi operasi baris gilir dan mencapai keselamatan benang.

Perbezaan antara ujian prestasi dan ujian unit dalam bahasa Go Perbezaan antara ujian prestasi dan ujian unit dalam bahasa Go May 08, 2024 pm 03:09 PM

Ujian prestasi menilai prestasi aplikasi di bawah beban yang berbeza, manakala ujian unit mengesahkan ketepatan satu unit kod. Ujian prestasi memfokuskan pada mengukur masa tindak balas dan daya pemprosesan, manakala ujian unit memfokuskan pada output fungsi dan liputan kod. Ujian prestasi mensimulasikan persekitaran dunia sebenar dengan beban tinggi dan serentak, manakala ujian unit dijalankan di bawah beban rendah dan keadaan bersiri. Matlamat ujian prestasi adalah untuk mengenal pasti kesesakan prestasi dan mengoptimumkan aplikasi, manakala matlamat ujian unit adalah untuk memastikan ketepatan dan keteguhan kod.

Apakah perangkap yang perlu kita perhatikan semasa mereka bentuk sistem teragih dengan teknologi Golang? Apakah perangkap yang perlu kita perhatikan semasa mereka bentuk sistem teragih dengan teknologi Golang? May 07, 2024 pm 12:39 PM

Perangkap dalam Bahasa Go Semasa Merekabentuk Sistem Teragih Go ialah bahasa popular yang digunakan untuk membangunkan sistem teragih. Walau bagaimanapun, terdapat beberapa perangkap yang perlu diberi perhatian apabila menggunakan Go yang boleh menjejaskan kekukuhan, prestasi dan ketepatan sistem anda. Artikel ini akan meneroka beberapa perangkap biasa dan memberikan contoh praktikal tentang cara mengelakkannya. 1. Terlalu banyak menggunakan concurrency Go ialah bahasa concurrency yang menggalakkan pembangun menggunakan goroutine untuk meningkatkan paralelisme. Walau bagaimanapun, penggunaan konkurensi yang berlebihan boleh menyebabkan ketidakstabilan sistem kerana terlalu banyak gorout bersaing untuk mendapatkan sumber dan menyebabkan overhed penukaran konteks. Kes praktikal: Penggunaan concurrency yang berlebihan membawa kepada kelewatan respons perkhidmatan dan persaingan sumber, yang ditunjukkan sebagai penggunaan CPU yang tinggi dan overhed kutipan sampah yang tinggi.

Apakah rangka kerja dan perpustakaan pengaturcaraan serentak dalam C++? Apakah kelebihan dan batasan masing-masing? Apakah rangka kerja dan perpustakaan pengaturcaraan serentak dalam C++? Apakah kelebihan dan batasan masing-masing? May 07, 2024 pm 02:06 PM

Rangka kerja pengaturcaraan serentak C++ menampilkan pilihan berikut: utas ringan (std::benang-benang Boost concurrency concurrency dan algoritma OpenMP untuk pemproses berbilang pemproses berprestasi tinggi (TBB); (cpp-Setuju).

Penjelasan terperinci tentang primitif penyegerakan dalam pengaturcaraan serentak C++ Penjelasan terperinci tentang primitif penyegerakan dalam pengaturcaraan serentak C++ May 31, 2024 pm 10:01 PM

Dalam pengaturcaraan berbilang benang C++, peranan primitif penyegerakan adalah untuk memastikan ketepatan berbilang utas yang mengakses sumber yang dikongsi Ia termasuk: Mutex (Mutex): melindungi sumber yang dikongsi dan menghalang akses serentak (ConditionVariable): thread Tunggu khusus syarat yang perlu dipenuhi sebelum meneruskan operasi atom: memastikan bahawa operasi dilaksanakan dengan cara yang tidak terganggu.

Perpustakaan dan alatan teknologi Golang yang digunakan dalam pembelajaran mesin Perpustakaan dan alatan teknologi Golang yang digunakan dalam pembelajaran mesin May 08, 2024 pm 09:42 PM

Perpustakaan dan alatan untuk pembelajaran mesin dalam bahasa Go termasuk: TensorFlow: perpustakaan pembelajaran mesin popular yang menyediakan alatan untuk membina, melatih dan menggunakan model. GoLearn: Satu siri algoritma pengelasan, regresi dan pengelompokan Gonum: Pustaka pengkomputeran saintifik yang menyediakan operasi matriks dan fungsi algebra linear.

Peranan teknologi Golang dalam pembangunan IoT mudah alih Peranan teknologi Golang dalam pembangunan IoT mudah alih May 09, 2024 pm 03:51 PM

Dengan keselarasan tinggi, kecekapan dan sifat merentas platform, bahasa Go telah menjadi pilihan ideal untuk pembangunan aplikasi Internet Perkara (IoT) mudah alih. Model keselarasan Go mencapai tahap keselarasan yang tinggi melalui goroutine (coroutine ringan), yang sesuai untuk mengendalikan sejumlah besar peranti IoT yang disambungkan pada masa yang sama. Penggunaan sumber Go yang rendah membantu menjalankan aplikasi dengan cekap pada peranti mudah alih dengan pengkomputeran dan storan terhad. Selain itu, sokongan merentas platform Go membolehkan aplikasi IoT digunakan dengan mudah pada pelbagai peranti mudah alih. Kes praktikal menunjukkan penggunaan Go untuk membina aplikasi penderia suhu BLE, berkomunikasi dengan penderia melalui BLE dan memproses data masuk untuk membaca dan memaparkan bacaan suhu.

Bagaimana untuk menangani keadaan perlumbaan dan keadaan perlumbaan dalam pengaturcaraan serentak Java? Bagaimana untuk menangani keadaan perlumbaan dan keadaan perlumbaan dalam pengaturcaraan serentak Java? May 08, 2024 pm 04:33 PM

Dalam pengaturcaraan serentak Java, keadaan perlumbaan dan keadaan perlumbaan boleh membawa kepada tingkah laku yang tidak dapat diramalkan. Keadaan perlumbaan berlaku apabila berbilang utas mengakses data kongsi pada masa yang sama, mengakibatkan keadaan data tidak konsisten, yang boleh diselesaikan dengan menggunakan kunci untuk penyegerakan. Keadaan perlumbaan ialah apabila berbilang benang melaksanakan bahagian kritikal yang sama pada masa yang sama, yang membawa kepada hasil yang tidak dijangkakan operasi atom boleh dipastikan dengan menggunakan pembolehubah atom atau kunci.

See all articles