Ruby Academy · Pelajaran

Ractor

Paralelisme sejati.

Pelajaran 4 dari 413 langkah

Ractor adalah pelajaran Ruby Academy gratis di CoddyKit. Ini adalah pelajaran 4 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 Ractor

Ractor (Aktor Ruby) adalah primitif konkurensi yang diperkenalkan di Ruby 3 dan menyediakan paralelisme yang sebenarnya. Setiap Ractor menjalankan kode Ruby secara mandiri, sehingga dua Ractor dapat menggunakan dua inti CPU pada saat yang sama.

  • Ractor tidak berbagi objek yang dapat diubah, sehingga dapat mengatasi keterbatasan GVL.
  • Ractor berkomunikasi dengan mengirim pesan.

Ractor masih bersifat eksperimental, sehingga Ruby mencetak peringatan saat Anda menggunakannya.

Membuat Ractor

Buat Ractor dengan Ractor.new dan sebuah blok. Blok tersebut berjalan secara paralel. Gunakan take untuk mendapatkan nilai akhir blok.

r = Ractor.new do
  2 + 3
end

puts r.take

Tidak Ada Status Bersama

Aturan utamanya: Ractor tidak dapat berbagi objek yang dapat diubah secara bebas. Blok Ractor tidak menangkap variabel lokal di luar blok seperti yang dilakukan blok biasa. Anda harus meneruskan data secara eksplisit.

Isolasi inilah yang membuat eksekusi paralel aman tanpa pengunci.

Meneruskan Argumen Masuk

Argumen untuk Ractor.new diteruskan ke parameter blok. Inilah cara yang aman untuk mengirim data ke dalam Ractor.

r = Ractor.new(10) do |x|
  x * x
end

puts r.take

Mengirim Pesan

Ractor memiliki kotak masuk pesan. Kirim 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

Mendorong vs Menarik

Ada dua arah komunikasi:

  • Mendorong: gunakan send ke dalam Ractor, lalu baca dengan Ractor.receive.
  • Menarik: Ractor menghasilkan nilai dengan Ractor.yield, lalu pihak luar membacanya dengan take.

Keduanya memungkinkan Ractor membentuk alur pemrosesan.

r = Ractor.new do
  Ractor.yield 1
  Ractor.yield 2
end

puts r.take
puts r.take

Objek Beku dan Dapat Dibagikan

Beberapa objek dapat dibagikan di antara Ractor karena tidak dapat diubah: true, false, nil, angka, simbol, dan objek yang dibekukan secara mendalam.

Ractor.make_shareable membekukan graf objek sehingga dapat dibagikan dengan aman.

data = Ractor.make_shareable([1, 2, 3])
puts "Frozen? " + data.frozen?.to_s

Menyalin vs Memindahkan

Saat Anda mengirim objek yang tidak dapat dibagikan, Ractor secara bawaan akan menyalinnya secara mendalam sehingga masing-masing pihak memiliki salinannya sendiri. Sebagai gantinya, Anda dapat memindahkannya dengan send(obj, move: true), yang memindahkan kepemilikan dan membuat objek asli tidak dapat digunakan.

Pemindahan menghindari biaya penyalinan untuk objek berukuran besar.

Pekerjaan Paralel

Bagilah pekerjaan yang membebani CPU ke beberapa Ractor dan kumpulkan hasilnya. Karena masing-masing berjalan sendiri, cara ini dapat menggunakan beberapa inti CPU.

ractors = (1..3).map do |n|
  Ractor.new(n) do |x|
    x * 100
  end
end

results = ractors.map(&:take)
puts "Results: " + results.join(", ")

Ractor vs Utas

Perbandingan:

  • Utas berbagi memori dan memerlukan kunci; Ractor terisolasi dan memerlukan pesan.
  • Utas tidak menjalankan pekerjaan CPU Ruby secara paralel; Ractor dapat melakukannya.
  • Ractor memiliki aturan yang lebih ketat sehingga mencegah banyak bug konkurensi.

Komprominya adalah aturan berbagi data yang lebih kaku.

Kapan Menggunakan Ractor

Pilih Ractor ketika:

  • Anda memiliki pekerjaan yang terikat pada CPU dan ingin menggunakan beberapa inti dalam satu proses.
  • Anda menginginkan isolasi untuk menghindari bug akibat keadaan bersama.

Ingatlah bahwa Ractor masih eksperimental; antarmukanya dapat berubah, dan banyak gem belum aman digunakan dengan Ractor.

Pemeriksaan Singkat

Uji pemahaman Anda tentang Ractor.

Ringkasan: Ractor

Anda telah mempelajari paralelisme dalam proses dengan Ractor:

  • Ractor.new menjalankan kode secara paralel; take mengambil hasilnya.
  • Teruskan data melalui argumen atau send; terima dengan Ractor.receive.
  • Objek disalin atau dipindahkan, bukan dibagikan secara bebas.
  • Ractor.make_shareable membekukan data agar aman dibagikan.

Dengan demikian, kursus Konkurensi Ruby yang mencakup utas, GVL, fiber, dan Ractor telah selesai.

Gratis untuk memulai

Belajar Ruby dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
29
Pelajaran
109

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Ractor” gratis?

Ya — teks lengkap “Ractor” 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 “Ractor”?

Paralelisme sejati. 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 4 dari 4.

Berapa lama pelajaran “Ractor” 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