Redis
 sql >> डेटाबेस >  >> NoSQL >> Redis

बहुत सारे टाइमर सेट करने या निर्धारित कार्य कतार का उपयोग करने के बीच समाधान की तलाश में

Node.js टाइमर बहुत कुशलता से कार्यान्वित किए जाते हैं। उनका कार्यान्वयन (वे कैसे काम करते हैं इसके बारे में एक विस्तृत लेख में वर्णित) आसानी से बहुत बड़ी संख्या में टाइमर को संभाल सकते हैं।

उन्हें एक डबल लिंक्ड सूची में रखा जाता है जिसे सॉर्ट किया जाता है और आग लगने वाले अगले टाइमर में इसके साथ जुड़ा एक वास्तविक libuv सिस्टम टाइमर होता है। जब वह टाइमर सक्रिय हो जाता है या रद्द कर दिया जाता है, तो सूची में अगला एक वास्तविक लिबव सिस्टम टाइमर से जुड़ा हो जाता है। जब एक नया टाइमर सेट किया जाता है, तो इसे केवल क्रमबद्ध सूची में डाला जाता है और, जब तक कि यह आग लगने वाला अगला नहीं बन जाता है, यह सूची में बस अपनी बारी आने का इंतजार कर रहा है। आप इनमें से हजारों को बहुत कुशलता से प्राप्त कर सकते हैं।

ये टाइमर कैसे काम करते हैं, इसके बारे में यहां कुछ संसाधन दिए गए हैं:

प्रदर्शन समस्याओं से पहले कितने समवर्ती सेटटाइमआउट?

नोडज आंतरिक रूप से टाइमर का प्रबंधन कैसे करता है

पहले संदर्भ में वास्तविक नोडज कोड से टिप्पणियों का एक समूह होता है जो बताता है कि टाइमर लिंक्ड सूची प्रणाली कैसे काम करती है और इसके लिए क्या अनुकूलित है।

दूसरा लेख आपको थोड़ा उच्च स्तर का विवरण देता है कि इसका आयोजन कैसे किया जाता है।

अन्य क्षमताएं हैं ताकि जब एक टाइमर सूची की शुरुआत में पहुंच जाए और यह आग लग जाए, तो उस कॉलबैक को कॉल करने के बाद, नोड.जेएस किसी भी अन्य टाइमर के लिए सूची के सामने की जांच करता है जो अब भी आग लगने के लिए तैयार हैं। यह किसी भी अन्य टाइमर को पहले वाले के समान "लक्ष्य समय" के साथ और अन्य किसी भी अन्य टाइमर को स्वीप करेगा जो इन विभिन्न अन्य कॉलबैक के चलने के दौरान आए हैं।

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

<ब्लॉकक्वॉट>

जावास्क्रिप्ट के लिए, पायथन के पहले समाधान के समान, मैं आवश्यकतानुसार कई सेटटाइमआउट उत्पन्न कर सकता था, लेकिन समस्या यह है कि सभी टाइमआउट मुख्य धागे पर काम करते हैं, लेकिन जैसा मैंने कहा, कार्य संसाधन गहन नहीं हैं और मुझे केवल सटीकता की आवश्यकता है दूसरा।

मुझे ऐसा लगता है कि नोडज आपकी मात्रा setTimeout() . को संभाल सकता है कॉल ठीक है। यदि आपके पास नोड.जेएस में कोई समस्या थी, तो यह टाइमर की संख्या के कारण नहीं होगा, लेकिन आपको यह सुनिश्चित करना होगा कि यदि आपके पास एक से अधिक कोर को संभालने के लिए अधिक काम है तो आप समस्या के लिए पर्याप्त सीपीयू लागू करते हैं। आप नोडज क्लस्टरिंग के साथ कोर उपयोग का विस्तार कर सकते हैं या एक कार्य कतार के साथ जो प्रसंस्करण में सहायता के लिए वर्कर थ्रेड या अन्य नोडज प्रक्रियाओं का उपयोग करता है। node.js, अपने आप में, I/O से संबंधित किसी भी चीज़ के साथ बहुत कुशल है, इसलिए जब तक आप प्रमुख CPU-गहन गणना नहीं कर रहे हैं, एक एकल node.js थ्रेड बहुत सारी ईवेंट प्रोसेसिंग को संभाल सकता है।

ध्यान रखें कि जावास्क्रिप्ट टाइमर सटीकता की कोई गारंटी नहीं देते हैं। यदि आप सीपीयू को बंद कर देते हैं, तो कुछ टाइमर निर्धारित समय से बाद में सक्रिय हो जाएंगे क्योंकि वे पूर्व-खाली नहीं हैं। लेकिन, यदि आपके कार्य CPU-गहन नहीं हैं, तो आप ठीक हो सकते हैं।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Django REST फ्रेमवर्क अभी भी खाली रेडिस कुंजियाँ होने के बाद भी कैश्ड डेटा के साथ प्रतिक्रिया करता है

  2. लोचदार बीनस्टॉक पर रेडिस को कैसे स्थापित और कॉन्फ़िगर करें

  3. सिग्नलआर एसएसएल पर एज़्योर रेडिस से कनेक्ट नहीं हो सकता

  4. क्या स्प्रिंग डेटा रेडिस (1.3.2.रिलीज) जेडिस के जेडिससेंटिनलपूल का समर्थन करता है?

  5. 127.0.0.1:6379 से रेडिस कनेक्शन विफल - ECONNREFUSED कनेक्ट करें