2016-11-05 13 views
5

मेरे पास एक आने वाली अनुरोध के लिए एक पूल बनाए रखने के लिए एक gen_server प्रक्रिया है, मुझे पूल की जांच करने की आवश्यकता है यह देखने के लिए कि क्या इनकमिंग अनुरोध के लिए कोई मिलान है, यदि कोई है, मिलान किए गए पूल को पूल से हटा दिया गया है और जवाब दोनों अनुरोधों के लिए बने होते हैं; यदि कोई नहीं है, तो बाद में परीक्षा के लिए पूल में नया अनुरोध लगाया गया है।एरलांग: बहुत सारे टाइमर ठीक है?

बिज़ तर्क की आवश्यकता है कि, अगर एक अनुरोध, R, बिना मिलान किया गया T सेकंड के लिए पूल में बैठता है, मैं की तरह "मैं तुम्हारे लिए एक मैच नहीं मिल सकता है" कुछ कह R के लिए एक जवाब बनाने की जरूरत है।

आदर्श रूप से, मैं टाइमर के साथ ऐसा करना चाहता हूं, विशेष रूप से, प्रत्येक आने वाले अनुरोध के लिए, यदि कोई मैच नहीं है, तो इसे पहले पूल में डाल दें, लेकिन समय-समय पर इसे हटाने के लिए gen_server को बताने के लिए टाइमर शुरू करें बेशक, अगर यह बाद में मेल खाता है, टाइमर रद्द किया जाना चाहिए।

मेरी चिंता यह है कि, यदि पूल में बहुत बेजोड़ अनुरोध हैं, तो बहुत सारे चलने वाले टाइमर होंगे, क्या यह (बहुत अधिक टाइमर) एक समस्या बन जाएगा?

+1

सभी टाइमर समान तरीके से काम नहीं करते हैं, मुझे पता है कि टाइमर: स्टार्ट' आम तौर पर टाला जाता है और प्रदर्शन दंड होता है, जबकि हजारों प्रक्रियाओं में 'erlang: send_after' का उपयोग करते हुए आम लगता है। – Reith

+0

@ रीथ मैं 'erlang का उपयोग कर रहा हूं: send_after' –

उत्तर

6

R18 में टाइमर कार्यान्वयन में बड़े सुधार किए गए थे।

Besides the API changes and time warp modes a lot of 
    scalability and performance improvements regarding time 
    management has been made internally in the runtime system. 
    Examples of such improvements are scheduler specific timer 
    wheels, scheduler specific BIF timer management, parallel 
    retrieval of monotonic time and system time on systems with 
    primitives that are not buggy. 

अनुसूचक विशिष्ट टाइमर पहियों क्या अपने परिदृश्य में दिलचस्प बात यह है कि वास्तव में है। मुझे संदेह है कि आप Erlang या किसी अन्य भाषा/पर्यावरण में अपनी समस्या के बेहतर प्रदर्शन समाधान के आसपास आ जाएगा। तो जब आप R18 या नए का उपयोग कर रहे हों तो आपका समाधान ठीक होना चाहिए।

+1

कुछ दिनों पहले कोडमेश पर, जो आर्मस्ट्रांग ने हजारों प्रक्रियाओं के स्पंजिंग के उदाहरण का प्रदर्शन किया, प्रत्येक एक विशिष्ट समय सो रहा था और फिर एक मिडी नोट खेल रहा था। पूरी तरह से काम किया! :-) – RichardC

+1

धन्यवाद, हनीक-पिची-विचोडिल। @ रिचर्ड सी ने भी परीक्षण के लिए 10 के टाइमर शुरू किए, यह भी झपकी नहीं है। –

संबंधित मुद्दे