Fiber
Keserentakan koperatif
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.resumeMenghantar 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.resumeMenghantar 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_sSerat 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
yieldatauresume. - 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.nextSerat 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.newbersamaresumemenjalankan dan menyambung semula serat.Fiber.yieldmenjeda 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.
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.