Fiber
Konkurensi kooperatif.
Fiber adalah pelajaran Ruby 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 Ruby Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Ruby Academy mencakup 4 pelajaran total.
Apa Itu Fiber
Fiber adalah unit eksekusi ringan yang Anda kendalikan secara manual. Berbeda dari utas, fiber tidak pernah berjalan sendiri; Anda secara eksplisit menyerahkan kendali kepadanya, lalu fiber menyerahkan kendali kembali.
- Hal ini disebut konkurensi kooperatif.
- Fiber murah untuk dibuat dan dijeda.
- Fiber menjadi dasar bagi pembangkit dan I/O asinkron di Ruby.
Membuat dan Melanjutkan
Buat fiber dengan Fiber.new dan mulai atau lanjutkan dengan resume. Blok tersebut berjalan hingga selesai atau dijeda.
fiber = Fiber.new do
puts "Inside the fiber"
end
fiber.resume
puts "Back in main"Menjeda dengan Menyerahkan Kontrol
Fiber.yield menjeda fiber dan mengembalikan kendali kepada pihak yang memanggil resume. Pemanggilan resume berikutnya melanjutkan eksekusi tepat setelah yield.
fiber = Fiber.new do
puts "Step 1"
Fiber.yield
puts "Step 2"
end
fiber.resume
puts "Main between steps"
fiber.resumeMengirim Nilai Keluar
Argumen untuk Fiber.yield menjadi nilai hasil dari resume. Hal ini memungkinkan fiber menghasilkan rangkaian nilai sesuai permintaan.
fiber = Fiber.new do
Fiber.yield 10
Fiber.yield 20
30
end
puts fiber.resume
puts fiber.resume
puts fiber.resumeMengirim Nilai Masuk
Argumen untuk resume menjadi nilai hasil dari Fiber.yield di dalam fiber. Komunikasi berlangsung dalam dua arah.
fiber = Fiber.new do
got = Fiber.yield "ready"
puts "Fiber received: " + got
end
puts fiber.resume
fiber.resume("hello")Penghitung Tak Terbatas
Karena fiber dapat dijeda dan dilanjutkan, fiber dapat memodelkan rangkaian malas yang tidak berujung tanpa pernah menghitung semuanya.
counter = Fiber.new do
n = 1
loop do
Fiber.yield n
n += 1
end
end
3.times { puts counter.resume }Memeriksa Apakah Masih Aktif
Fiber#alive? memberi tahu apakah fiber masih dapat dilanjutkan. Melanjutkan fiber yang sudah tidak aktif akan menimbulkan FiberError.
fiber = Fiber.new { puts "done" }
puts "Alive before: " + fiber.alive?.to_s
fiber.resume
puts "Alive after: " + fiber.alive?.to_sFiber vs Utas
Perbedaan utama:
- Utas dijadwalkan oleh lingkungan eksekusi; fiber dijadwalkan oleh Anda.
- Utas dapat dihentikan sementara kapan saja; fiber hanya berpindah pada
yieldatauresume. - Fiber menghindari kondisi balapan karena hanya satu fiber yang berjalan dan titik perpindahannya ditentukan secara jelas.
Pencacah Menggunakan Fiber
Pencacah tertunda milik Ruby dibangun di atas fiber. Pengiterasi eksternal berhenti sementara di antara nilai-nilai, seperti fiber menyerahkan kontrol.
enum = Enumerator.new do |y|
y << 1
y << 2
y << 3
end
puts enum.next
puts enum.nextFiber dan I/O Asinkron
Ruby modern menyediakan kait penjadwal fiber. Pustaka seperti gem async menggunakannya sehingga ketika satu fiber menunggu I/O, penjadwal secara otomatis melanjutkan fiber lainnya.
Dengan demikian, Anda mendapatkan I/O dengan konkurensi tinggi menggunakan kode yang terlihat seperti kode sekuensial biasa.
Kapan Menggunakan Fiber
Gunakan fiber ketika Anda memerlukan:
- Pembangkit malas yang menghasilkan nilai sesuai permintaan.
- Alur kontrol bergaya korutin.
- Perpindahan terperinci dan deterministik tanpa pengunci.
Untuk sebagian besar kebutuhan konkurensi sehari-hari, utas atau gem async, yang menggunakan fiber di balik layar, lebih mudah digunakan.
Pemeriksaan Singkat
Uji pemahaman Anda tentang fiber.
Rangkuman: Fiber
Anda telah mempelajari konkurensi kooperatif dengan fiber:
Fiber.newbersamaresumemenjalankan dan melanjutkan fiber.Fiber.yieldmenjeda fiber dan mengembalikan kendali.- Nilai mengalir dalam dua arah melalui argumen yield dan resume.
- Fiber mendukung pencacah dan penjadwal I/O asinkron.
Selanjutnya: Ractor, yang akhirnya memberi Anda paralelisme yang sebenarnya.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Fiber” gratis?
Ya — teks lengkap “Fiber” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Ruby Academy, upgrade ke CoddyKit PRO. Kursus Ruby Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Fiber”?
Konkurensi kooperatif. Kamu berlatih Ruby 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 Ruby Academy?
Tidak diperlukan pengalaman sebelumnya. Ruby 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 “Fiber” 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 Ruby Academy ini?
Ya. Setiap pelajaran Ruby 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.