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.takePaylaşı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.takeMesaj 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
sendile gönderin,Ractor.receiveile okuyun. - Çekme: Bir Ractor
Ractor.yieldile değer üretir, dışarıdaki kodtakeile 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.takeDondurulmuş 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_sKopyalama 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.newkodu paralel çalıştırır;takesonucunu alır.- Verileri bağımsız değişkenler veya
sendaracılığıyla aktarın;Ractor.receiveile alın. - Nesneler serbestçe paylaşılmaz; kopyalanır veya taşınır.
Ractor.make_shareableverileri 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
- İş Parçacıkları
- GVL Açıklaması
- Fiber'lar
- Ractor'lar