Ruby Academy · Pelajaran

Fiber

Keserentakan koperatif

Pelajaran 3 daripada 413 langkah

Fiber ialah pelajaran Ruby Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Ruby Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Ruby Academy merangkumi sejumlah 4 pelajaran.

Apakah Itu Serat?

Serat ialah unit pelaksanaan ringan yang anda kawal secara manual. Tidak seperti utas, serat tidak pernah berjalan sendiri; anda menyerahkan kawalan kepadanya secara jelas, kemudian serat itu menyerahkan kawalan kembali.

  • Ini dipanggil keserentakan koperatif.
  • Serat murah untuk dicipta dan dijeda.
  • Serat menjadi asas penjana dan input/output tak segerak dalam Ruby.

Mencipta dan Menyambung Semula

Cipta serat dengan Fiber.new dan mulakan atau sambung semula serat itu dengan resume. Blok tersebut berjalan sehingga selesai atau dijeda.

fiber = Fiber.new do
  puts "Inside the fiber"
end

fiber.resume
puts "Back in main"

Menjeda dengan Penyerahan

Fiber.yield menjeda serat dan mengembalikan kawalan kepada pihak yang memanggil resume. resume seterusnya meneruskan pelaksanaan tepat selepas penyerahan.

fiber = Fiber.new do
  puts "Step 1"
  Fiber.yield
  puts "Step 2"
end

fiber.resume
puts "Main between steps"
fiber.resume

Menghantar Nilai Keluar

Argumen kepada Fiber.yield menjadi nilai yang dipulangkan oleh resume. Ini membolehkan serat menghasilkan jujukan nilai apabila diminta.

fiber = Fiber.new do
  Fiber.yield 10
  Fiber.yield 20
  30
end

puts fiber.resume
puts fiber.resume
puts fiber.resume

Menghantar Nilai Masuk

Argumen kepada resume menjadi nilai yang dipulangkan oleh Fiber.yield di dalam serat. Komunikasi mengalir dalam kedua-dua arah.

fiber = Fiber.new do
  got = Fiber.yield "ready"
  puts "Fiber received: " + got
end

puts fiber.resume
fiber.resume("hello")

Pembilang Tidak Terhingga

Oleh sebab serat boleh dijeda dan disambung semula, serat boleh memodelkan jujukan malas yang tidak berkesudahan tanpa mengira semuanya terlebih dahulu.

counter = Fiber.new do
  n = 1
  loop do
    Fiber.yield n
    n += 1
  end
end

3.times { puts counter.resume }

Memeriksa Sama Ada Masih Hidup

Fiber#alive? memberitahu anda sama ada serat masih boleh disambung semula. Menyambung semula serat yang telah mati akan mencetuskan FiberError.

fiber = Fiber.new { puts "done" }
puts "Alive before: " + fiber.alive?.to_s
fiber.resume
puts "Alive after: " + fiber.alive?.to_s

Serat berbanding Utas

Perbezaan utama:

  • Utas dijadualkan oleh masa jalan; serat dijadualkan oleh anda.
  • Utas boleh diambil alih pada bila-bila masa; serat hanya bertukar pada yield atau resume.
  • Serat mengelakkan keadaan perlumbaan kerana hanya satu serat berjalan dan titik pertukaran adalah jelas.

Pengenumerasi Menggunakan Serat

Pengenumerasi malas Ruby dibina berasaskan serat. Pengiterasi luaran berhenti seketika antara nilai, sama seperti serat menyerahkan kawalan.

enum = Enumerator.new do |y|
  y << 1
  y << 2
  y << 3
end

puts enum.next
puts enum.next

Serat dan Input/Output Tak Segerak

Ruby moden menyertakan cangkuk penjadual serat. Pustaka seperti pakej tak segerak menggunakannya supaya apabila satu serat menunggu input/output, penjadual menyambung semula serat lain secara automatik.

Ini memberikan input/output dengan keserentakan tinggi menggunakan kod yang kelihatan seperti kod berjujukan biasa.

Masa untuk Menggunakan Serat

Gunakan serat apabila anda memerlukan:

  • Penjana malas yang menghasilkan nilai apabila diminta.
  • Aliran kawalan gaya korutin.
  • Pertukaran berbutir halus dan dapat ditentukan tanpa kunci.

Untuk kebanyakan keserentakan harian, utas atau pakej tak segerak (yang menggunakan serat di sebalik tabir) lebih mudah digunakan.

Semakan Ringkas

Uji pemahaman anda tentang serat.

Ringkasan: Serat

Anda telah mempelajari keserentakan koperatif dengan serat:

  • Fiber.new bersama resume menjalankan dan menyambung semula serat.
  • Fiber.yield menjeda serat dan mengembalikan kawalan.
  • Nilai mengalir dalam kedua-dua arah melalui argumen penyerahan dan resume.
  • Serat menggerakkan pengenumerasi dan penjadual input/output tak segerak.

Seterusnya: aktor Ruby, yang akhirnya memberikan keselarian sebenar.

Percuma untuk bermula

Pelajari Ruby dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
29
Pelajaran
109

Soalan Lazim

Adakah pelajaran “Fiber” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Ruby Academy, termasuk “Fiber”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Ruby Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Fiber”?

Keserentakan koperatif Anda berlatih Ruby Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Ruby Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Ruby Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.

Berapa lamakah pelajaran “Fiber” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Ruby Academy ini?

Ya. Setiap pelajaran Ruby Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

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