簡體   English   中英

Ruby中的多線程系統調用

[英]Multithreaded system calls in Ruby

我有一個使用sidekiq將一些處理發送到隊列的系統。 這些過程包括對操縱圖像的程序進行系統調用。 我的程序性能很差。 當我“頂”我的系統時,幾乎所有的cpu都被ruby消耗,而圖像軟件僅消耗了幾個CPU。

我嘗試與5、10、20、30名工人進行測試。 增加更多的工人並不能提高處理性能(值越高,效果甚至越差)。

我的工人是這樣的:

def perform(file)
    command = "convert -strip -resize 580x580 -quality 90 -sampling-factor 4:2:0 -interlace Plane #{file} #{file}.main"
    `#{command}`
end

有什么方法可以改善Ruby中的多線程系統調用?

不幸的是,問題是Resque的核心設計。 因為它使用了派生工作器模型,並且因為Ruby 1.9不兼容CoW,所以每個子流程中的第一個GC調用都會產生整個流程內存空間的完整副本。 太慢了

正是由於這個問題,許多人選擇了Sidekiq作為替代方案。 在Ruby 1.9中,線程比fork便宜得多,並且應該可以顯着提高性能。

就是說,一旦Ruby 2.0附帶了CoW友好的內存GC模型,Resque應該會大大提高競爭力。 但是,至少有幾個季度不會發生這種情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM