Salah satu aspek yang paling populer dari bahasa pemrograman Go adalah dukungan kelas satu untuk kapasitas komputer untuk menyelesaikan banyak tugas secara bersamaan. Kemampuan untuk menjalankan kode secara bersamaan menjadi lebih penting dalam pemrograman karena komputer beralih dari mengeksekusi satu aliran kode lebih cepat ke menjalankan banyak aliran secara bersamaan. Untuk membuat program berjalan lebih cepat, pemrogram harus mendesainnya untuk berjalan secara bersamaan sehingga setiap elemen sistem yang bersamaan dapat dieksekusi secara independen dari yang lain.
Dua fungsi Go, Goroutines, dan saluran membuat konkurensi lebih mudah saat digunakan bersama. Goroutines menawarkan tipe primal dasar untuk kemampuan ini. Goroutines lebih murah dalam hal ruang memori, interaksi antar-utas, dan konektivitas jaringan. Mereka juga memiliki waktu startup yang lebih baik daripada utas, yang didukung oleh banyak bahasa pemrograman. Intinya, Go mengacu pada Goroutines sebagai apa yang disebut Java dan bahasa pemrograman lainnya sebagai utas.
Apa itu Goroutines?
Sebuah goroutine adalah sebuah thread implementasi sederhana di Golang yang bekerja secara simultan dengan program lainnya. Goroutines terjangkau ketika menyerupai utas standar karena biaya pembuatan goroutine sangat rendah. Oleh karena itu, mereka banyak digunakan di Go untuk pemrograman bersamaan. Setiap program setidaknya terdiri dari satu goroutine yang disebut main goroutine. Goroutine utama mengontrol semua goroutine lainnya; jadi, jika goroutine utama berakhir, semua goroutine lain dalam skrip juga melakukannya. Goroutine selalu aktif di latar belakang.
Contoh: Berikut ilustrasinya: Anda sedang menulis sesuatu di buku catatan Anda dan merasa lapar; Anda akan istirahat dan mendapatkan beberapa makanan. Kemudian mulailah menulis lagi. Anda sekarang melakukan dua peran (menulis dan makan) dengan jendela waktu yang dianggap sebagai pekerjaan bersamaan. Perlu digarisbawahi bahwa dua tugas ini (menulis dan makan) masih harus diselesaikan secara bersamaan. Ketika item diselesaikan secara bersamaan, itu disebut paralelisme (bayangkan menggunakan ponsel Anda sambil mengunyah chip). Concurrency termasuk berinteraksi dengan banyak hal secara bersamaan. Paralelisme (melakukan banyak hal secara bersamaan) adalah subclass dari ini (tidak harus dilakukan pada waktu yang sama) dengan beberapa jadwal.
Kita dapat menambahkan goroutine dengan menerapkan kata kunci go ke pemanggilan fungsi. Setelah kami menerapkan kata kunci go ke panggilan yang berfungsi, kami akan mengatur konkurensi ke kinerja. Tapi pertama-tama, mari kita kenali efek penerapan kata kunci go ke eksekusi. Mari kita pertimbangkan ada dua goroutine dalam sebuah program. Teks " package main import " akan menjadi entri program. Di Go, impor utama paket adalah pernyataan impor deklaratif. Goroutine utama ( goroutine first goroutine) tersirat. Ketika kita mengeksekusi go ( f), goroutine kedua terbentuk (0). Biasanya, perangkat lunak kami akan mengeksekusi setiap perintah di fungsi utama ketika kami menjalankan suatu fungsi sebelum melanjutkan ke baris berikutnya.
Kita dapat menjalankan prosedur dengan cepat dengan goroutine sebelum melanjutkan ke langkah berikutnya. Akibatnya, metode scanln telah ditambahkan; jika tidak, kode akan berakhir sebelum menampilkan semua angka. Goroutines mudah dibuat dan dapat dibuat dalam jumlah besar. Anda akan melihat bahwa ketika perangkat lunak ini dijalankan, goroutine tampaknya beroperasi secara berurutan daripada secara bersamaan.
Keuntungan dari Goroutines dibandingkan utas
Biaya Goroutines sedikit
Goroutines lebih murah daripada proses lainnya. Ukuran massa hanya beberapa kilobyte, dan dapat diperluas atau menyusut untuk memenuhi permintaan program, berbeda dengan utas, yang ukuran tumpukannya harus ditentukan dan bersifat permanen.
Ada beberapa Goroutines yang digandakan
Ada sangat sedikit utas sistem operasi yang digandakan. Dalam sebuah program dengan ratusan goroutine, mungkin hanya ada satu proses. Sisa goroutine dipindahkan ke proses sistem operasi baru. Misalkan setiap goroutine dalam proses itu macet, misalnya, ketika mencari intervensi pengguna. Runtime mengelola masing-masing, dan kami pengembang diberi API yang jelas untuk dikelola secara bersamaan sambil diisolasi dari kerumitan halus ini.
Goroutines berkomunikasi menggunakan saluran
Goroutines berkomunikasi menggunakan saluran. Dimaksudkan untuk mencegah situasi balapan terjadi ketika mereka berbagi memori yang relevan. Saluran dapat dibandingkan dengan saluran yang digunakan goroutine untuk berinteraksi.
Apa itu saluran?
Dua goroutine dapat berinteraksi satu sama lain dan mengoordinasikan operasinya melalui saluran. Perangkat lunak ini akan terus mencetak " ping ". Untuk menunjuk bentuk saluran, awalan " chan " disertai dengan item yang dikirimkan pada saluran." Dalam hal ini, kami menyediakan string. Pada saluran, pesan dikirim dan diterima menggunakan operator. " ping " mengacu pada pengiriman sebuah " ping ".
Saluran digunakan untuk menjaga agar kedua goroutine tetap sinkron. Sebelum mencoba mengirim pesan melalui saluran, router akan menunggu hingga printer siap menerimanya. Istilah untuk ini adalah penghambatan. Saat membuat saluran, parameter kedua dapat digunakan untuk fungsi make: c:= make (chan int, 1)
Arah Saluran
Kita dapat menentukan orientasi bentuk saluran dan parameter yang akan diterima atau dikirim. Tanda metode Pinger, misalnya, dapat diubah menjadi ini:
func pinger(c chan<- string)
C hanya bisa dikirim sekarang. Menerima dari c akan menghasilkan kesalahan kode. Demikian pula, kami dapat mengubah output menjadi:
func printer(c string -chan)
Sebuah semi-channel tidak memiliki kendala ini. Saluran dua arah dapat disuplai ke prosedur yang hanya menerima saluran transmisi saja atau hanya terima, tetapi tidak sebaliknya.
Bagaimana cara membuat Goroutine?
Metode meluncurkan goroutine sangatlah mudah. Terapkan kata kunci " go " ke pemanggilan fungsi untuk membuat goroutine yang akan dieksekusi secara bersamaan. Di sini kita akan membuat goroutine. Misalkan kita memiliki program yang berisi dua fungsi: satu adalah fungsi sambutan, dan yang lainnya adalah fungsi utama.
Saat kita membuat goroutine baru, kode welcome() akan dijalankan bersama fungsi main(). Ketika Anda melakukan program ini, Anda akan terkejut. Program ini hanya menampilkan teks operasi utama. Apa yang terjadi dengan goroutine pertama atau goroutine baru yang kita mulai? Untuk memahami mengapa hal ini terjadi, pertama-tama kita harus mengetahui dua fitur utama goroutine.
- Fungsi goroutine merespon secara instan saat kita membuat goroutine baru. Selain fungsi, manajemen tidak bergantung pada goroutine, sehingga tidak menunggu untuk menyelesaikan eksekusinya. Eksekusi diserahkan ke blok kode berikut setelah fungsi goroutine. Inilah sebabnya mengapa parameter tertentu dari goroutine diabaikan.
- Setiap goroutine tambahan harus dijalankan bersamaan dengan goroutine utama. Jika goroutine utama gagal, program akan berhenti, dan tidak ada goroutine tambahan yang akan dijalankan.
Anda sekarang mengerti mengapa kode kami tidak berfungsi. Setelah panggilan to go welcome(), kontrol dipindahkan ke baris kode berikut sebelum menunggu hello goroutine selesai, dan fungsi utamanya adalah output. Goroutine utama mati karena tidak ada skrip untuk dijalankan, mencegah hello Goroutine berjalan.
Kami menggunakan teknik sleep ( time.sleep(1 * time.second)) untuk menghentikan sementara goroutine selama 1 detik. Fungsi untuk pergi selamat datang () sekarang memiliki waktu yang cukup untuk diselesaikan sebelum goroutine utama keluar. Perangkat lunak ini awalnya menulis " welcome goroutine " dan kemudian menunggu satu detik sebelum mencetak fungsi utama. Kami menggunakan teknik sleep di goroutine utama untuk menjedanya sejenak agar goroutine lainnya selesai.
Membuat beberapa Goroutines
Kita akan memulai program lain untuk membuat beberapa goroutine. Kita bisa memulainya terlebih dahulu dengan membuat dua goroutine yang akan dieksekusi secara paralel. Kedua goroutine ini adalah number goroutines[go numbers()] dan goroutine alfabet [ go alphabets ()].
Angka goroutine tetap selama 250 ms sebelum mencetak 1, berhenti lagi sebelum mencetak 2, dan seterusnya hingga menghasilkan 5. Demikian pula, goroutine alfanumerik menampilkan huruf dari a ke e dan kemudian menunggu 400 milidetik. Akhirnya, goroutine utama membuat bilangan bulat dan karakter alfanumerik dan berhenti sebentar, dan kemudian goroutine utama berakhir.
Kesalahan pemrograman bersamaan yang sering terjadi
- Tidak adanya sinkronisasi saat ini diperlukan
- Gunakan waktu. Panggilan tidur untuk melakukan sinkronisasi
- Biarkan goroutine menggantung nilai salinan dari tipe dalam paket sinkronisasi standar
- Panggil sinkronisasi
- kelompok tunggu
- Tambahkan metode di tempat yang salah
- Gunakan saluran sebagai saluran besok, bukan dari goroutine pengirim fungsional terakhir
Kesimpulan
Pada artikel ini, kami mengembangkan program yang menggunakan kata kunci go untuk meluncurkan satu goroutine dan beberapa goroutine yang secara bersamaan mencetak bilangan bulat. Setelah memulai program itu, kami membuat saluran baru, yang kemudian kami gunakan untuk menghasilkan angka di satu goroutine dan meneruskannya ke goroutine lain sehingga bisa ditampilkan di layar. Sebagai demonstrasi terakhir tentang cara memulai goroutine untuk mempercepat aplikasi Anda pada sistem multi-core, Anda secara bersamaan meluncurkan banyak goroutine "pencetakan".
Seperti yang kita ketahui, goroutine adalah cara melakukan tugas dengan lebih cepat dan efisien. Ini adalah salah satu prosedur penerapan yang ditawarkan oleh AppMaster untuk meningkatkan fungsionalitas aplikasi Anda. Dengan AppMaster, bahkan orang dengan sedikit atau tanpa pengetahuan pemrograman dapat menyelesaikan tugas yang sulit diselesaikan melalui pengkodean manual.
AppMaster adalah platform no-code yang mampu membuat aplikasi seluler dan web serta backend. Fakta menarik AppMaster membuat backend oleh Go dengan kecepatan 22.000 baris per detik dan Anda dapat mengakses kode sumbernya.