0Pricing
Ruby Academy · Ders

Ractor'lar

Gerçek paralellik

Ractor'lar, CoddyKit'te ücretsiz bir Ruby Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Ruby Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Ruby Academy kursu toplamda 4 dersten oluşur.

Ractor Nedir?

Bir Ractor (Ruby aktörü), Ruby 3'te tanıtılan ve gerçek paralellik sağlayan bir eşzamanlılık yapısıdır. Her Ractor Ruby kodunu kendi başına çalıştırır; bu nedenle iki Ractor aynı anda iki CPU çekirdeğini kullanabilir.

  • Ractor'lar değiştirilebilir nesneleri paylaşmaz; böylece GVL sınırlamasını aşarlar.
  • Mesaj göndererek iletişim kurarlar.

Ractor'lar hâlâ deneyseldir; bu nedenle Ruby, onları kullandığınızda bir uyarı yazdırır.

Ractor Oluşturma

Ractor.new ve bir blok ile bir Ractor oluşturun. Blok paralel çalışır. Bloğun son değerini almak için take kullanın.

r = Ractor.new do
  2 + 3
end

puts r.take

Paylaşılan Durum Yoktur

Temel kural şudur: Ractor'lar değiştirilebilir nesneleri serbestçe paylaşamaz. Bir Ractor bloğu, normal bir bloğun yaptığı gibi dış kapsamdaki yerel değişkenleri yakalamaz. Verileri açıkça geçirmeniz gerekir.

Paralel yürütmeyi kilitler olmadan güvenli kılan şey bu yalıtımdır.

Bağımsız Değişkenleri İçeri Aktarma

Ractor.new öğesine geçirilen bağımsız değişkenler, blok parametrelerine aktarılır. Bir Ractor'a veri göndermenin güvenli yolu budur.

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

puts r.take

Mesaj Gönderme

Ractor'ların bir ileti gelen kutusu vardır. ractor.send(value) ile gönderin ve blok içinde Ractor.receive ile alın.

r = Ractor.new do
  msg = Ractor.receive
  "got: " + msg
end

r.send("hello")
puts r.take

İtme ve Çekme

İki iletişim yönü vardır:

  • İtme: Bir Ractor'a send ile gönderin, Ractor.receive ile okuyun.
  • Çekme: Bir Ractor Ractor.yield ile değer üretir, dışarıdaki kod take ile okur.

Birlikte kullanıldıklarında Ractor'ların işlem hatları oluşturmasını sağlarlar.

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

puts r.take
puts r.take

Dondurulmuş ve Paylaşılabilir Nesneler

Bazı nesneler değiştirilemedikleri için Ractor'lar arasında paylaşılabilir: doğru, yanlış, boş değer, sayılar, semboller ve derinlemesine dondurulmuş nesneler.

Ractor.make_shareable, bir nesne grafiğini dondurarak güvenle paylaşılabilmesini sağlar.

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

Kopyalama ve Taşıma

Paylaşılabilir olmayan bir nesne gönderdiğinizde Ractor, varsayılan olarak nesnenin derin kopyasını oluşturur; böylece her iki tarafın kendine ait bir kopyası olur. Bunun yerine nesneyi taşıyabilirsiniz. Bu işlem sahipliği devreder ve orijinali kullanılamaz hâle getirir: send(obj, move: true)

Taşıma, büyük nesnelerde kopyalama maliyetini ortadan kaldırır.

Paralel Çalışma

CPU'yu yoğun kullanan işleri Ractor'lar arasında bölüştürün ve sonuçları toplayın. Her biri kendi başına çalıştığı için bu yöntem birden çok çekirdeği kullanabilir.

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

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

Ractor'lar ve İş Parçacıkları

Karşılaştırma:

  • İş parçacıkları belleği paylaşır ve kilit gerektirir; Ractor'lar yalıtılmıştır ve iletilere ihtiyaç duyar.
  • İş parçacıkları Ruby'deki CPU'ya dayalı çalışmayı paralelleştiremez; Ractor'lar bunu yapabilir.
  • Ractor'ların daha katı kuralları vardır; bu da birçok eşzamanlılık hatasını önler.

Bunun karşılığında veri paylaşımı kuralları daha katıdır.

Ractor'lar Ne Zaman Kullanılır

Şu durumlarda Ractor'ları seçin:

  • CPU'ya bağlı işleriniz varsa ve tek bir işlem içinde birden çok çekirdek kullanmak istiyorsanız.
  • Paylaşılan durumdan kaynaklanan hataları önlemek için yalıtım istiyorsanız.

Ractor'ların deneysel olduğunu unutmayın; arayüzler değişebilir ve birçok paket henüz Ractor'larla uyumlu değildir.

Kısa Sınama

Ractor'larla ilgili anlayışınızı sınayın.

Özet: Ractor'lar

Ractor'larla işlem içi paralellik kullanmayı öğrendiniz:

  • Ractor.new kodu paralel çalıştırır; take sonucunu alır.
  • Verileri bağımsız değişkenler veya send aracılığıyla aktarın; Ractor.receive ile alın.
  • Nesneler serbestçe paylaşılmaz; kopyalanır veya taşınır.
  • Ractor.make_shareable verileri güvenli paylaşım için dondurur.

Bu, Ruby Eşzamanlılık kursunu tamamlar: iş parçacıkları, GVL, lifler ve Ractor'lar.

Sıkça Sorulan Sorular

“Ractor'lar” dersi ücretsiz mi?

Evet — “Ractor'lar” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Ruby Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Ruby Academy kursu toplamda 4 dersten oluşur.

“Ractor'lar” dersinde ne öğreneceğim?

Gerçek paralellik Ruby Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Ruby Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Ruby Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Ractor'lar” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Ruby Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Ruby Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. İş Parçacıkları
  2. GVL Açıklaması
  3. Fiber'lar
  4. Ractor'lar
← Ruby Academy Sayfasına Dön