2011-01-11 23 views
27

Özetle, Ruby thread-safe'de standart kitaplık Logger sınıfı mıdır? Google'ın gündeme geldiği tek yararlı bilgi, forumda "güvenli" gibi görünen bir kullanıcı olduğunu söyledi. Ve olup olmadığını anlamaya çalışmak için bir kaydediciyi test etmek için zaman harcamak gibi hissetmiyorum.Ruby's stdlib Logger sınıfı iş parçacığı güvenli midir?

Kullanmakta olduğum iş parçacığı için log4r kullanıyorum, ancak standart kitaplık zaten bunu yapıyorsa aşırı hızı var. Bunun parçacığı güvenliği doğru alır mı kefil olamaz iken Yani, bundan yapmakta olduğunu teyit edebilir

def write(message) 
    @mutex.synchronize do 
    if @shift_age and @dev.respond_to?(:stat) 
     begin 
     check_shift_log 
     rescue 
     raise Logger::ShiftingError.new("Shifting failed. #{$!}") 
     end 
    end 
    @dev.write(message) 
    end 
end 

:

cevap

44

logger.rb hızlı bir bakış aşağıdaki gibi kodu ortaya koymaktadır Doğru yapmak için uyumlu bir çaba!

P.S.

-1

Kodunu okuyarak kendiniz için bu gibi soruları yanıtlamak çoğu zaman kolaydır. Asıl cevabım, aslında yanlış. Nemo157'nin yorumunu aşağıdan okuyun. Sadece referans olarak burada bıraktım.

Orijinal:

Ben bu konularda sanmıyorum. Şu ana kadar bildiğim Ruby'nin tüm uygulamaları, her seferinde bir iş parçacığını etkin bir şekilde çalıştırıyor: Birçok iş parçacığı başlatmanıza izin veriyor, ancak her işlem için yalnızca bir iş parçacığı çalışıyor.

+8

Evet, ancak, yalnızca bir iş parçacığı, çok işlemli Ruby kodu iş parçacığı için güvenli hale getirilemese bile, atom işlemlerinin olması gereken birden çok ifadeyi kapsayabilir. Örneğin. x = point.x; point.x = x + 1', thread iki deyim arasında kesilebilir ve başka bir iş parçacığı, bu iş parçacığı yeniden başladığında üzerine yazılacak olan "point.x" değerini değiştirebilir. Ayrıca JRuby, Java iş parçacıklarını kullandığı için gerçekten çok iş parçacıklı. – Nemo157

+0

İyi nokta. Orijinal yanıtımı referans olarak bıraktım. – kirakun

0

Bazı Ruby sınıfları, iş parçacığı için güvenli olacak şekilde tasarlanmıştır, ancak belgelerindeki bir hecenin sözleriyle açıkça belirtmeyin. PHP gibi diğer programlama dillerindeki belgelerin aksine.

Yığın Taşması'nda Queue iş parçacığı için güvenli olup olmadığını sorduğumu hatırlıyorum.

İlgili konular