2012-05-23 5 views
10

में चल रहे धागे की गणना कैसे करें I सिनात्रा वेब सर्वर में एक थ्रेड में 'लंबे समय तक चलना' ((निष्पादित करने में लगभग 0.5 सेकंड) कार्य करना चाहते हैं।रूबी सर्वर

वेब प्रतिक्रिया के बारे में 20 एमएस लेता है, इसलिए यदि मैं व्यस्त तो धागे अप पाइल जाएगा मिलता है ...

तो मैं सोच रहा था कि मैं इसे एक समय होनेवाला बनाना अगर मैं व्यस्त हो क्या करना होगा ..

if (running_thread_count > 10) 
    stuff_that_takes_a_second() 
else 
    Thread.new do 
     stuff_that_takes_a_second() 
    end 
end 

आप कैसे चल रहे धागे की संख्या प्राप्त करते हैं (मुझे लगता है कि थ्रेड की संख्या लॉन्च की गई है, और अभी तक नहीं चल रहा है) - आप run_thread_count को कैसे कोड करते हैं?

def running_thread_count 
return Thread.list.count 
end 

या मैं धागे चलाने वाले के लिए जाँच करने की आवश्यकता है? यानी जब एक धागा चल रहा है, तो क्या यह थ्रेड.सूची में वापस आना बंद कर देगा?

मैं शामिल नहीं होना चाहता क्योंकि यह उद्देश्य को हरा देगा - जो तब तक वापस आना है जब तक कि हम काम करने वाले बहुत सारे धागे का समर्थन नहीं कर लेते।

+0

लेकिन 'join' बिना, सभी धागे से बाहर निकलें, तो उनमें से एक निष्पादन पूरा करती है। 'Thread.list.count' वर्तमान में चल रहे थ्रेड की संख्या प्राप्त करता है। 'थ्रेड' में 'स्टेटस' नामक एक विधि है जो प्रक्रिया के तहत धागे के लिए' "नींद" या '" रन "लौटाती है। मैंने कोड को एक उत्तर के रूप में जोड़ा है। – Kashyap

+0

मैंने सोचा कि एक वेब सर्वर के रूप में चल रहा एक रूबी प्रोग्राम हर समय चल रहा है, ताकि एक वेब अनुरोध के दौरान शुरू किया गया धागा पूरा हो जाएगा? –

+0

आपके पास एक बिंदु है। अधिक प्रयोग करेंगे। धन्यवाद – Kashyap

उत्तर

17

इस धागे कि "रन" का दर्जा हो रही है की गिनती और नहीं "नींद" दे देंगे

def running_thread_count 
    Thread.list.select {|thread| thread.status == "run"}.count 
end