Rumah > pembangunan bahagian belakang > Golang > Golang - Concurrency, Parallelism, Sequence

Golang - Concurrency, Parallelism, Sequence

王林
Lepaskan: 2024-02-09 22:00:10
ke hadapan
1106 orang telah melayarinya

Golang - 并发、并行、顺序

editor php Xigua memperkenalkan anda kepada tiga konsep penting konkurensi, selari dan jujukan di Golang. Dalam pengaturcaraan serentak, Golang menyediakan pelbagai alatan dan sintaks untuk melaksanakan operasi serentak, membolehkan program mengendalikan berbilang tugas pada masa yang sama. Pengaturcaraan selari adalah untuk melaksanakan berbilang tugas pada masa yang sama dan meningkatkan kecekapan pelaksanaan program dengan menggunakan pemproses berbilang teras. Pengaturcaraan berurutan adalah untuk melaksanakan kod mengikut turutan dan sesuai untuk senario di mana ia perlu untuk memastikan bahawa tugasan dilaksanakan dalam susunan tertentu. Dengan menggunakan ketiga-tiga konsep ini secara fleksibel, pembangun boleh memberikan permainan sepenuhnya kepada kelebihan Golang dalam senario konkurensi tinggi dan meningkatkan prestasi dan kecekapan program.

Kandungan soalan

Saya sedang belajar Go sekarang dan saya benar-benar kecewa dengan perbezaan antara concurrency, paralelisme dan sequential.

Andaikan kita mempunyai proses yang memintas serpihan 5 URL dan menampal kandungan ke dalam fail teks. Proses ini mengambil masa 2 saat setiap URL.

  • Berurutan -> mengambil masa 10 saat kerana ia melaksanakan satu demi satu
  • Sejajar -> Mengambil masa kurang daripada 10 saat kerana ia melakukan operasi ini secara serentak tetapi menggunakan berbilang benang atau pemproses.
  • Concurrency -> Mengambil masa kurang daripada 10 saat tetapi tidak memerlukan berbilang benang atau pemproses.

Sehingga saat ini saya tidak pasti sama ada saya betul. Soalan saya ialah:

Saya membaca bahawa paralelisme melakukan perkara pada masa yang sama (seperti berlari dan mendengar muzik), dan concurrency melakukan perkara pada masa yang sama (seperti menghabiskan sarapan sambil menyeterika baju anda).

Tetapi jika itu yang berlaku, kenapa concurrency tidak mengambil masa 10 saat untuk diselesaikan, kerana pada penghujung hari, anda tidak melakukan semuanya pada masa yang sama, tetapi hanya melakukan sebahagian daripada segala-galanya sehingga semuanya selesai?

Penyelesaian

Berikut adalah analogi untuk dijelaskan.

Anda perlu menggoreng 5 biji telur, bahagian cerah ke atas. Untuk memasak telur, anda memecahkannya pada kuali, tunggu beberapa minit, dan kemudian keluarkan.

  • Cara berurutan ialah goreng telur pertama dahulu, kemudian telur kedua, dan seterusnya sehingga mendapat 5 biji.

  • Kaedah selari adalah dengan mengupah 5 tukang masak, minta mereka masing-masing menggoreng telur, dan kemudian tunggu sehingga semuanya siap.

  • Kaedah selari ialah anda ikut resepi sebenarmasak sendiri kesemua 5 biji telur. Iaitu, anda dengan cepat memecahkan setiap telur ke dalam kuali dan kemudian mengeluarkan setiap telur apabila ia sudah siap.

Sebab anda menjimatkan masa dengan tidak mengupah 5 chef adalah kerana bilangan chef tidak mengehadkan kelajuan anda. Memburu telur mengambil masa beberapa minit tetapi hanya mengambil perhatian dan tangan anda selama beberapa saat pada permulaan dan akhir.

Waktu jalan Go adalah pintar seperti masa jalan sistem pengendalian moden. Mereka tahu bahawa semasa utas anda menunggu untuk menerima respons rangkaian, pemproses boleh mencari perkara lain untuk menarik perhatiannya.

Gambaran besar konkurensi bukan terutamanya mengenai bilangan pemproses, tetapi perbalahan sumber keseluruhan. Pelaksanaan tugas memerlukan sumber dan kita tidak boleh menggunakan lebih banyak sumber daripada yang ada. Pemproses adalah sumber, tetapi terdapat juga storan memori, lebar jalur memori, lebar jalur rangkaian, pemegang fail, dan sebagainya.

Atas ialah kandungan terperinci Golang - Concurrency, Parallelism, Sequence. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
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