2012-08-28 18 views
11

विशेष रूप से (सर्वर पक्ष) वी 8 के बारे में बात करते हुए, और यह मानते हुए कि मैं सटीकता के बारे में चिंतित नहीं हूं क्योंकि मैं इसका पता लगा सकता हूं और क्षतिपूर्ति कर सकता हूं, क्या मैं सचमुच सेट किए बिना हजारों अपेक्षाकृत सरल टाइमआउट सेट कर सकता हूं रैम के अलावा किसी अन्य सीमा का सामना करना पड़ रहा है? क्या कोई पकड़ है मुझे इस बात से अवगत होना चाहिए कि क्या मैं ऐसे सिस्टम का उपयोग करना चाहता हूं जहां किसी भी समय हजारों निर्धारित शेडआउट हो सकते हैं?क्या सेटटाइमआउट करने की कोई सीमा है?

रिकॉर्ड के लिए मैंने How Javascript Timers work पर जॉन के रेसिग उत्कृष्ट लेख को पढ़ा है, इसलिए पहले से ही कवर किए गए किसी भी चीज़ को इंगित करने की आवश्यकता नहीं है :) मुझे पता है कि node.js सिंगल थ्रेडेड है, टाइमर अन्य टाइमर को ब्लॉक कर सकते हैं अगर वे भी लेते हैं लंबा, आदि

पीएस: मैं कड़ाई से यह समझने की कोशिश कर रहा हूं कि मैं क्या वर्णन करता हूं, मुझे यह जानने की ज़रूरत नहीं है कि "ऐसा करने का कोई बेहतर तरीका है जो आप करना चाहते हैं!"।

+5

वहाँ तुम क्या करने का इरादा क्या करना एक बेहतर तरीका गारंटी है! – jAndy

+2

कुछ मिलियन टाइमआउट सेट करना सिर्फ 'लूप' दूर है। इसे आज़माएं और इसके बजाए हमें बताएं। ;) – Jon

+0

@ जोन मैंने कोशिश की क्योंकि मैं भी सोच रहा था और मुझे विश्वास है कि यह महंगा नहीं था ... – Alfred

उत्तर

11

एकमात्र असली दुनिया सीमा जो आप के खिलाफ आ सकती है वह नोड के लिए उपलब्ध स्मृति की मात्रा है। परीक्षण करने के लिए निम्नलिखित कोड का प्रयोग करें। मैंने सफलतापूर्वक एक मिलियन और int32Max का उपयोग करके नीचे दिया गया उदाहरण चलाया। Int64Max का उपयोग करते समय, मुझे नोड से निम्न त्रुटि मिली। मैं 4 जीबी रैम के साथ 64 बिट विंडोज़ का उपयोग कर रहा हूं। परीक्षण करने के लिए

FATAL ERROR: CALL_AND_RETRY_2 Allocation failed - process out of memory 

नोड कोड:

var util = require('util'); 
var int64Max = 9007199254740992; 
var int32Max = 2147483647; 
var oneMillion = 1000000; 
var tenThousand = 10000; 
var counter = 0; 

//Exchange the limiter with one of the above vars to test. 
for (var i = 0; i < oneMillion; i++){ 
    setTimeout(log, 1); 
    //Required as the timeout/callback method will not be called until the loop ends due 
    //to node/js being single threaded. 
    util.log('loop:' + i); 
} 

function log(){ 
    util.log('callback: ' + counter++); 
} 
+0

जावास्क्रिप्ट संख्या में 53 बिट्स मंटिसा हैं, इसलिए एक बार यह 2^53 तक पहुंचने के बाद, वृद्धि अब काम नहीं करती है, यह राउंड बिना किसी बदलाव के एक ही नंबर पर बंद करें। मुझे शक है? डीबगर कंसोल में 'Math.pow (2,53) 'और' Math.pow (2,53) + 1' आज़माएं। 'Int64Max' का उल्लेख क्यों किया जाता है? – doug65536

1

मुझे नहीं पता कि नोड कैसे काम करता है, लेकिन यदि आप उन्हें चलाने के बिना MAXINT + 1 टाइमर बनाते हैं, तो आप एक पूर्णांक ओवरफ़्लो को जोखिम देते हैं।

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