Tahap Pipeline
Rangkai tahap channel
Tahap Pipeline adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Go Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Go Academy mencakup 4 pelajaran total.
Apa Itu Alur
Alur adalah serangkaian stage yang dihubungkan oleh kanal. Setiap stage menerima nilai, melakukan pekerjaan, lalu mengirimkan hasil ke hilir. Data mengalir seperti lini perakitan.
- Setiap stage berupa goroutine
- Stage hanya berkomunikasi melalui kanal
- Dapat dirangkai dan mudah dipahami
Konvensi Tanda Tangan Stage
Sesuai konvensi, setiap stage menerima satu atau beberapa kanal masukan yang hanya dapat menerima dan mengembalikan kanal keluaran yang hanya dapat menerima. Dengan demikian, stage dapat dirangkai.
func stage(in <-chan int) <-chan int {
out := make(chan int)
go func() {
defer close(out)
for v := range in {
out <- v
}
}()
return out
}Stage Sumber
Stage pertama menghasilkan data. Stage ini sering menerima irisan atau argumen variadik, lalu mengalirkannya ke dalam kanal.
func numbers(vals ...int) <-chan int {
out := make(chan int)
go func() {
defer close(out)
for _, v := range vals {
out <- v
}
}()
return out
}Stage Transformasi
Stage ini mengalikan setiap nilai dengan sepuluh. Stage ini membaca dari in dan menulis nilai yang telah ditransformasi ke out.
func tenfold(in <-chan int) <-chan int {
out := make(chan int)
go func() {
defer close(out)
for v := range in {
out <- v * 10
}
}()
return out
}Stage Penyaring
Penyaring hanya meneruskan nilai yang memenuhi suatu kondisi. Di sini kita mempertahankan bilangan genap dan membuang sisanya.
func evens(in <-chan int) <-chan int {
out := make(chan int)
go func() {
defer close(out)
for v := range in {
if v%2 == 0 {
out <- v
}
}
}()
return out
}Merangkai Stage
Rangkai stage dengan meneruskan satu keluaran sebagai masukan berikutnya. Rangkaian ini hampir terbaca seperti sebuah kalimat.
pipe := tenfold(evens(numbers(1, 2, 3, 4)))
for v := range pipe {
fmt.Println(v)
}defer close(out)
Menggunakan defer close(out) menjamin kanal keluaran ditutup ketika goroutine stage selesai, bahkan jika nanti Anda menambahkan pengembalian lebih awal. Hal ini meneruskan sinyal akhir aliran ke hilir.
Alur Lengkap
Sumber, lalu penyaring, lalu transformasi. Jalankan untuk melihat hanya tenfold dari masukan genap.
package main
import "fmt"
func numbers(vals ...int) <-chan int {
out := make(chan int)
go func() { defer close(out); for _, v := range vals { out <- v } }()
return out
}
func evens(in <-chan int) <-chan int {
out := make(chan int)
go func() { defer close(out); for v := range in { if v%2 == 0 { out <- v } } }()
return out
}
func tenfold(in <-chan int) <-chan int {
out := make(chan int)
go func() { defer close(out); for v := range in { out <- v * 10 } }()
return out
}
func main() {
for v := range tenfold(evens(numbers(1, 2, 3, 4, 5, 6))) {
fmt.Println(v)
}
}Pengaliran, Bukan Pengelompokan
Nilai mengalir melalui alur satu per satu saat dihasilkan. Stage transformasi dapat mulai mengerjakan item pertama sebelum sumber menghasilkan item terakhir. Hal ini menjaga penggunaan memori tetap rendah dan latensi tetap kecil.
Alur Bersifat Tertunda
Stage tidak melakukan pekerjaan sampai sesuatu membaca dari keluarannya. Jika konsumen berhenti melakukan perulangan, stage di hulu akan terblokir saat mengirim. Tekanan balik alami ini mencegah komputasi yang sia-sia.
Menambahkan Konkurensi
Untuk mempercepat stage yang lambat, lakukan penyebaran ke beberapa instans yang membaca masukan yang sama, lalu gabungkan keluarannya. Tanda tangan stage tetap sama; hanya pengkabelannya yang berubah.
Pemeriksaan Singkat
Uji pemahaman Anda tentang alur.
Ringkasan
Anda telah mempelajari stage alur:
- Setiap stage: masukan hanya untuk menerima, mengembalikan keluaran hanya untuk menerima
- defer close(out) meneruskan akhir aliran
- Rangkai stage dengan menyarangkan pemanggilan
- Alur mengalir secara tertunda dengan tekanan balik
Belajar Go dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 51
- Pelajaran
- 203
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Tahap Pipeline” gratis?
Ya — teks lengkap “Tahap Pipeline” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Go Academy, upgrade ke CoddyKit PRO. Kursus Go Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Tahap Pipeline”?
Rangkai tahap channel Kamu berlatih Go Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Go Academy?
Tidak diperlukan pengalaman sebelumnya. Go Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Tahap Pipeline” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Go Academy ini?
Ya. Setiap pelajaran Go Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Pola Worker Pool
- Fan-Out Fan-In
- Tahap Pipeline
- Penghentian yang Mulus