0Pricing
Ruby Academy · Pelajaran

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

Mengirim 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.resume

Mengirim 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_s

Fiber vs Utas

Perbedaan utama:

  • Utas dijadwalkan oleh lingkungan eksekusi; fiber dijadwalkan oleh Anda.
  • Utas dapat dihentikan sementara kapan saja; fiber hanya berpindah pada yield atau resume.
  • 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.next

Fiber 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.new bersama resume menjalankan dan melanjutkan fiber.
  • Fiber.yield menjeda 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.

Semua pelajaran dalam kursus ini

  1. Thread
  2. Penjelasan GVL
  3. Fiber
  4. Ractor
← Kembali ke Ruby Academy