Grow with AppMaster Grow with AppMaster.
Become our partner arrow ico

Goroutine

Goroutine

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.

normal vs goroutine

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 ".

Try AppMaster no-code today!
Platform can build any web, mobile or backend application 10x faster and 3x cheaper
Start Free

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.

Go-channels

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.

Posting terkait

Bagaimana PWA Dapat Meningkatkan Performa dan Pengalaman Pengguna di Perangkat Seluler
Bagaimana PWA Dapat Meningkatkan Performa dan Pengalaman Pengguna di Perangkat Seluler
Jelajahi bagaimana Aplikasi Web Progresif (PWA) meningkatkan kinerja seluler dan pengalaman pengguna, menggabungkan jangkauan web dengan fungsionalitas seperti aplikasi untuk keterlibatan yang lancar.
Menjelajahi Keunggulan Keamanan PWA untuk Bisnis Anda
Menjelajahi Keunggulan Keamanan PWA untuk Bisnis Anda
Jelajahi keunggulan keamanan Progressive Web Apps (PWA) dan pahami bagaimana PWA dapat meningkatkan operasi bisnis Anda, melindungi data, dan menawarkan pengalaman pengguna yang lancar.
5 Industri Teratas yang Mendapat Manfaat dari Penerapan PWA
5 Industri Teratas yang Mendapat Manfaat dari Penerapan PWA
Temukan lima industri teratas yang menuai manfaat substansial dari penerapan Progressive Web Apps, dan jelajahi bagaimana PWA meningkatkan keterlibatan pengguna dan pertumbuhan bisnis.
Mulai Gratis
Terinspirasi untuk mencoba ini sendiri?

Cara terbaik untuk memahami kekuatan AppMaster adalah dengan melihatnya sendiri. Buat aplikasi Anda sendiri dalam hitungan menit dengan langganan gratis

Hidupkan Ide Anda