Dengan pembangunan berterusan teknologi perkakasan komputer, sistem komputer hari ini telah menggunakan berbilang teras CPU sebagai konfigurasi pemproses biasa, yang memberikan sokongan dan kemungkinan yang lebih baik untuk pengaturcaraan serentak. Bahasa golang bukan sahaja menyokong pengaturcaraan serentak, tetapi juga menyediakan beberapa alat dan teknik untuk menggunakan berbilang teras CPU, membolehkan program menggunakan perkakasan moden dengan lebih cekap. Artikel ini akan menyelidiki cara golang menggunakan berbilang teras untuk mencapai prestasi yang lebih baik.
1. Model konkurensi Golang
Model konkurensi Golang adalah berdasarkan goroutine. Goroutine ialah benang ringan yang diuruskan oleh sistem masa jalan Go. Berbanding dengan benang, goroutin lebih ringan dan lebih pantas, dan boleh dibuat dan dimusnahkan dengan mudah hanya 4KB, dan sejumlah besar goroutin boleh dibuat dalam proses yang sama. Goroutine mempunyai hak untuk mengekalkan lokaliti, jadi mereka boleh menggunakan keselarasan CPU dengan berkesan. Selain itu, Golang juga menyediakan saluran chan sebagai mekanisme komunikasi antara goroutine Ia menggunakan pemprosesan komunikasi berurutan untuk mengelakkan pengurusan butiran manual seperti kunci dan pembolehubah keadaan.
2. Golang menggunakan teknologi berbilang teras
Golang menyediakan beberapa alatan dan teknik untuk menggunakan berbilang teras CPU untuk meningkatkan prestasi program.
Anda boleh menggunakan pembolehubah persekitaran GOMAXPROCS di Golang untuk menentukan bilangan maksimum CPU yang digunakan pada masa jalan. Secara lalai, Golang menggunakan semua teras CPU komputer. Walau bagaimanapun, memandangkan penjadualan goroutine diuruskan oleh sistem masa jalan Go, menggunakan lebih banyak teras CPU tidak semestinya akan meningkatkan prestasi program, tetapi boleh membawa kepada lebih banyak penukaran konteks dan pembaziran sumber. Oleh itu, dalam penggunaan sebenar, nilai GOMAXPROCS perlu diselaraskan dengan sewajarnya mengikut situasi tertentu untuk mendapatkan prestasi yang lebih baik.
Mekanisme serentak Golang membolehkan program melaksanakan berbilang goroutin pada masa yang sama, dengan itu menggunakan berbilang teras CPU dengan lebih baik. Anda boleh memanfaatkan pemproses berbilang teras moden dengan menulis program serentak, meningkatkan prestasi program dalam kebanyakan kes. Concurrency ialah salah satu ciri teras Golang, jadi Golang mempunyai pelaksanaan concurrency yang sangat cekap dan menyokong pelbagai mekanisme kawalan concurrency seperti operasi atom, penguncian dan penyegerakan.
Dalam penggunaan sebenar, anda mungkin menghadapi sejumlah besar goroutine yang dicipta, yang akan membawa kepada banyak penukaran konteks dan pembaziran sumber. Dalam kes ini, kolam goroutine boleh digunakan untuk mengehadkan bilangan goroutine. Kolam goroutine ialah mekanisme yang menjana bilangan goroutin yang tetap pada masa jalanan dan memberikan tugasan kepada setiap goroutine untuk mengelak daripada mencipta terlalu banyak goroutin. Kumpulan goroutine boleh mengurus bilangan goroutine dengan berkesan dan menghapuskan suis konteks yang tidak perlu, dengan itu meningkatkan prestasi program.
Golang juga menyokong pengkomputeran teragih, yang boleh memperuntukkan tugas pengkomputeran kepada berbilang mesin atau CPU, dengan itu meningkatkan lagi prestasi program. Pengkomputeran teragih memerlukan penggunaan mekanisme RPC Golang untuk kerjasama dan komunikasi. RPC Golang boleh menggunakan perpustakaan standard secara langsung atau menggunakan perpustakaan pihak ketiga (seperti gRPC). Melalui pengkomputeran teragih, tugas pengkomputeran boleh dibahagikan kepada berbilang subtugas dan diberikan kepada berbilang mesin atau CPU untuk pelaksanaan, dengan itu mempercepatkan pengkomputeran.
Dalam sesetengah atur cara yang memerlukan pengisihan, algoritma pengisihan mungkin menjadi hambatan prestasi. Memandangkan algoritma pengisihan biasanya merupakan tugas intensif CPU, pelbagai benang atau coroutine boleh digunakan untuk meningkatkan kelajuan algoritma. Secara khusus, tugas pengisihan boleh dibahagikan kepada berbilang subtugas, dan setiap subtugas diproses oleh goroutine atau benang, dengan itu mencapai pelaksanaan serentak algoritma. Di samping itu, algoritma pengisihan yang cekap seperti pengisihan cepat, pengisihan, dsb. boleh digunakan untuk meningkatkan lagi kelajuan pelaksanaan algoritma pengisihan.
Algoritma MapReduce ialah model pengkomputeran selari yang boleh membahagikan sejumlah besar data kepada beberapa set data kecil dan kemudian melaksanakan tugas pengkomputeran secara serentak, dan akhirnya meringkaskan keputusan. Golang menyediakan fungsi Map and Reduce untuk menyokong algoritma MapReduce, yang boleh menggunakan berbilang teras CPU untuk memproses tugas pengkomputeran secara selari, dengan itu meningkatkan prestasi program. Pada masa yang sama, dengan mengoptimumkan pelaksanaan fungsi Map and Reduce, kecekapan pelaksanaan algoritma MapReduce boleh dipertingkatkan lagi.
3. Ringkasan
Golang mempunyai mekanisme pelaksanaan serentak yang sangat cekap, menyokong pelbagai teknologi pengoptimuman berbilang teras dan boleh menggunakan seni bina perkakasan moden dengan berkesan. Dalam penggunaan sebenar, mekanisme konkurensi Golang, kumpulan goroutine, pengkomputeran teragih, pengoptimuman algoritma pengisihan dan kaedah lain boleh digunakan untuk meningkatkan prestasi program mengikut keperluan pengoptimuman program tertentu. Pada pemproses berbilang teras, dengan menggunakan sepenuhnya teknologi pengoptimuman berbilang teras Golang, kami boleh menjadikan program berjalan lebih pantas dan lebih cekap.
Atas ialah kandungan terperinci Cara menggunakan multi-core dalam golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!