Ractor
Keselarian sebenar
Ractor ialah pelajaran Ruby Academy percuma di CoddyKit. Ini ialah pelajaran 4 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 Aktor Ruby?
Aktor Ruby ialah primitif keserentakan yang diperkenalkan dalam Ruby 3 dan menyediakan keselarian sebenar. Setiap aktor Ruby menjalankan kod Ruby sendiri, jadi dua aktor Ruby boleh menggunakan dua teras CPU pada masa yang sama.
- Aktor Ruby tidak berkongsi objek boleh ubah, sekali gus mengatasi batasan GVL.
- Aktor Ruby berkomunikasi dengan menghantar mesej.
Aktor Ruby masih bersifat percubaan, jadi Ruby mencetak amaran apabila anda menggunakannya.
Mencipta Aktor Ruby
Cipta satu dengan Ractor.new dan satu blok. Blok itu berjalan secara selari. Gunakan take untuk mendapatkan nilai akhir blok tersebut.
r = Ractor.new do
2 + 3
end
puts r.takeTiada Keadaan Dikongsi
Peraturan utamanya: aktor Ruby tidak boleh berkongsi objek boleh ubah secara bebas. Blok aktor Ruby tidak menangkap pemboleh ubah setempat luaran seperti blok biasa. Anda mesti menghantar data kepadanya secara jelas.
Pengasingan ini menjadikan pelaksanaan selari selamat tanpa kunci.
Menghantar Argumen Masuk
Argumen kepada Ractor.new dihantar kepada parameter blok. Inilah cara yang selamat untuk menghantar data ke dalam aktor Ruby.
r = Ractor.new(10) do |x|
x * x
end
puts r.takeMenghantar Mesej
Aktor Ruby mempunyai peti masuk mesej. Hantar dengan ractor.send(value) dan terima di dalam blok dengan Ractor.receive.
r = Ractor.new do
msg = Ractor.receive
"got: " + msg
end
r.send("hello")
puts r.takeTolak berbanding Tarik
Dua arah komunikasi:
- Tolak:
sendke dalam aktor Ruby, kemudian baca denganRactor.receive. - Tarik: aktor Ruby menyerahkan nilai dengan
Ractor.yield, kemudian pihak luar membacanya dengantake.
Secara bersama, kedua-duanya membolehkan aktor Ruby membentuk saluran paip.
r = Ractor.new do
Ractor.yield 1
Ractor.yield 2
end
puts r.take
puts r.takeObjek Beku dan Boleh Dikongsi
Sesetengah objek boleh dikongsi merentas aktor Ruby kerana objek tersebut tidak boleh diubah: true, false, nil, nombor, simbol dan objek yang dibekukan secara mendalam.
Ractor.make_shareable membekukan graf objek supaya graf itu boleh dikongsi dengan selamat.
data = Ractor.make_shareable([1, 2, 3])
puts "Frozen? " + data.frozen?.to_sMenyalin berbanding Memindahkan
Apabila anda menghantar objek yang tidak boleh dikongsi, Ractor secara lalai akan menyalinnya secara mendalam supaya setiap pihak mempunyai salinannya sendiri. Sebaliknya, anda boleh memindahkannya dengan send(obj, move: true), yang memindahkan pemilikan dan menjadikan objek asal tidak boleh digunakan.
Perpindahan mengelakkan kos penyalinan untuk objek besar.
Kerja Selari
Pecahkan kerja yang intensif CPU merentas Ractor dan kumpulkan hasilnya. Oleh sebab setiap Ractor berjalan sendiri, pendekatan ini boleh menggunakan berbilang teras.
ractors = (1..3).map do |n|
Ractor.new(n) do |x|
x * 100
end
end
results = ractors.map(&:take)
puts "Results: " + results.join(", ")Ractor berbanding Benang
Perbandingan:
- Benang berkongsi memori dan memerlukan kunci; Ractor diasingkan dan memerlukan mesej.
- Benang tidak menjalankan kerja CPU Ruby secara selari; Ractor boleh melakukannya.
- Ractor lebih ketat, sekali gus menghalang banyak pepijat keserentakan.
Imbuhannya ialah peraturan perkongsian data yang lebih tegar.
Bila Hendak Menggunakan Ractor
Pilih Ractor apabila:
- Anda mempunyai kerja yang terikat pada CPU dan mahu menggunakan berbilang teras dalam satu proses.
- Anda mahukan pengasingan untuk mengelakkan pepijat keadaan dikongsi.
Ingat bahawa Ractor masih bersifat percubaan; API mungkin berubah dan banyak gem masih belum selamat digunakan dengan Ractor.
Semakan Ringkas
Uji pemahaman anda tentang Ractor.
Imbas Kembali: Ractor
Anda telah mempelajari pemprosesan selari dalam proses dengan Ractor:
Ractor.newmenjalankan kod secara selari;takemendapatkan hasilnya.- Hantar data melalui argumen atau
send; terima data denganRactor.receive. - Objek disalin atau dipindahkan, bukan dikongsi secara bebas.
Ractor.make_shareablemembekukan data supaya selamat dikongsi.
Dengan ini, tamatlah kursus Keserentakan Ruby: benang, GVL, fiber dan Ractor.
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 “Ractor” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Ruby Academy, termasuk “Ractor”, 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 “Ractor”?
Keselarian sebenar 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 4 daripada 4.
Berapa lamakah pelajaran “Ractor” 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.