Rumah > pembangunan bahagian belakang > Golang > Perbandingan dan analisis kecekapan pengaturcaraan bebas kunci dan pengaturcaraan kunci dalam fungsi Golang

Perbandingan dan analisis kecekapan pengaturcaraan bebas kunci dan pengaturcaraan kunci dalam fungsi Golang

PHPz
Lepaskan: 2023-05-16 12:51:27
asal
1173 orang telah melayarinya

Dalam beberapa tahun kebelakangan ini, Golang telah menjadi semakin popular dan telah menjadi salah satu bahasa pengaturcaraan yang digunakan oleh ramai pengaturcara. Di Golang, apabila bercakap tentang pengaturcaraan serentak, kita pasti akan menghadapi dua mod pengaturcaraan: kunci dan tanpa kunci. Jadi, apakah kelebihan, kelemahan dan senario yang boleh digunakan?

1. Definisi dan kelebihan serta keburukan pengaturcaraan tanpa kunci

Pengaturcaraan tanpa kunci bermakna apabila berbilang benang mengakses memori secara serentak, tidak perlu menggunakan kunci untuk operasi penyegerakan. Pelaksanaan klasik pengaturcaraan bebas kunci di Golang ialah algoritma CAS (Banding-dan-Tukar). CAS boleh dianggap sebagai kunci konkurensi optimistik Ia meletakkan operasi baca dan tulis dalam operasi atom Setiap kali data diubah suai, ia akan membandingkan dahulu sama ada nilai dalam memori semasa adalah sama dengan nilai yang dijangkakan, dan kemudian melaksanakan operasi. . Jika nilai semasa dalam ingatan adalah sama dengan nilai yang dijangkakan, operasi tulis dilakukan, jika tidak, kegagalan dikembalikan.

Kelebihan pengaturcaraan tanpa kunci ialah ia boleh mengelakkan semua overhed yang disebabkan oleh kunci, termasuk suis konteks yang tidak perlu, menunggu dan operasi pengecualian bersama. Tambahan pula, struktur data dalam pengaturcaraan bebas kunci boleh diakses oleh berbilang benang secara serentak, yang sangat berguna dalam aplikasi yang sangat serentak. Akhirnya, pengaturcaraan tanpa kunci juga boleh mengelakkan masalah seperti kebuntuan dan kelaparan, kerana masalah sekatan benang yang disebabkan oleh menunggu kunci tidak akan berlaku.

Kelemahan pengaturcaraan tanpa kunci ialah ia lebih sukar untuk dilaksanakan dan memerlukan pengaturcara untuk mereka bentuk algoritma dan struktur data yang sangat dioptimumkan. Selain itu, memandangkan utas dalam pengaturcaraan bebas kunci tidak mempunyai perintah pelaksanaan yang ditentukan, anda perlu lebih berhati-hati apabila menangani isu berkaitan pesanan, jika tidak, keputusan yang tidak dijangka akan berlaku. Akhir sekali, pengaturcaraan bebas kunci sukar untuk diperluaskan kepada persekitaran teragih kerana penyegerakan data dalam persekitaran teragih sukar untuk dijamin.

2. Definisi dan kelebihan serta keburukan pengaturcaraan kunci

Pengaturcaraan kunci merujuk kepada penggunaan kunci untuk melaksanakan operasi penyegerakan apabila berbilang benang mengakses memori secara serentak. Golang menyediakan kunci yang sangat mudah - Mutex dalam pakej penyegerakan, yang menggunakan mekanisme yang sangat mudah untuk menyelesaikan masalah kawalan serentak. Apabila utas perlu mengakses bahagian tertentu memori yang dikongsi, ia perlu mendapatkan kunci terlebih dahulu Pada masa ini, utas lain tidak akan dapat mengakses bahagian memori ini Selepas utas semasa melengkapkan akses kepada memori , kunci akan dilepaskan dan utas lain boleh terus mengakses bahagian memori ini.

Kelebihan pengaturcaraan kunci ialah ia agak mudah untuk dilaksanakan dan pengaturcara hanya perlu menggunakan Mutex untuk kawalan serentak. Di samping itu, aliran pemprosesan dalam pengaturcaraan kunci adalah deterministik, jadi isu berkaitan pesanan boleh ditangani. Di samping itu, pengaturcaraan kunci juga boleh memproses data dalam persekitaran yang diedarkan, dan penggunaan kunci yang diedarkan dan mekanisme lain dapat memastikan penyegerakan data.

Kelemahan pengaturcaraan kunci ialah ia memperkenalkan banyak overhed, termasuk pemerolehan/pelepasan kunci dan penukaran konteks. Selain itu, utas dalam pengaturcaraan kunci dilaksanakan secara bersiri, jadi masalah seperti pengecualian bersama mungkin berlaku dalam senario konkurensi tinggi, sekali gus menjejaskan prestasi aplikasi.

3. Analisis Kecekapan

Sebaliknya, pengaturcaraan bebas kunci dan pengaturcaraan kunci masing-masing mempunyai kelebihan dan kelemahan tersendiri, jadi adalah sangat penting untuk memilih mod pengaturcaraan yang sesuai mengikut aplikasi sebenar senario. Secara umumnya, dalam senario konkurensi tinggi, pengaturcaraan tanpa kunci mempunyai prestasi yang lebih tinggi. Kita boleh menggunakan alat Benchmark untuk menguji prestasi pengaturcaraan bebas kunci dan pengaturcaraan kunci Berikut ialah set data ujian:

Pengaturcaraan tanpa kunci mengambil masa 123.4ms
Pengaturcaraan kunci (Mutex) mengambil masa. 345.6ms

Kita dapat melihat bahawa apabila jumlah data adalah besar, prestasi pengaturcaraan bebas kunci adalah 2-3 kali lebih cepat daripada pengaturcaraan menggunakan kunci, tetapi apabila jumlah data adalah kecil, perbezaan antara kedua-duanya tidak jelas. Ini kerana apabila jumlah data adalah kecil, overhed kunci adalah agak kecil dan tidak akan memberi kesan yang besar terhadap prestasi aplikasi.

4. Ringkasan

Pengaturcaraan bebas kunci dan pengaturcaraan kunci masing-masing mempunyai kelebihan dan kelemahan tersendiri. Anda perlu memilih mod pengaturcaraan yang sesuai mengikut senario aplikasi sebenar yang berbeza. Dalam senario konkurensi tinggi, pengaturcaraan tanpa kunci mempunyai prestasi yang lebih tinggi. Walau bagaimanapun, pengaturcaraan tanpa kunci lebih sukar untuk dilaksanakan, mempunyai toleransi kesalahan yang lemah dan tidak sesuai untuk menangani isu berkaitan pesanan, manakala pengaturcaraan kunci perlu mempertimbangkan isu seperti overhed kunci dan pengecualian bersama. Oleh itu, dalam aplikasi praktikal, pertimbangan menyeluruh perlu dibuat berdasarkan situasi sebenar.

Atas ialah kandungan terperinci Perbandingan dan analisis kecekapan pengaturcaraan bebas kunci dan pengaturcaraan kunci dalam fungsi Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan