Ruby Academy · Pelajaran

Ractor

Keselarian sebenar

Pelajaran 4 daripada 413 langkah

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

Tiada 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.take

Menghantar 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.take

Tolak berbanding Tarik

Dua arah komunikasi:

  • Tolak: send ke dalam aktor Ruby, kemudian baca dengan Ractor.receive.
  • Tarik: aktor Ruby menyerahkan nilai dengan Ractor.yield, kemudian pihak luar membacanya dengan take.

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

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

Menyalin 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.new menjalankan kod secara selari; take mendapatkan hasilnya.
  • Hantar data melalui argumen atau send; terima data dengan Ractor.receive.
  • Objek disalin atau dipindahkan, bukan dikongsi secara bebas.
  • Ractor.make_shareable membekukan data supaya selamat dikongsi.

Dengan ini, tamatlah kursus Keserentakan Ruby: benang, GVL, fiber dan Ractor.

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

Semua pelajaran dalam kursus ini

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