2016-08-08 25 views
0

ich diesen library verwenden in einer Schleife zu schlafen, schauen meine Schleife wie dieserwarum Schlaf in NodeJS wie funktioniert nicht erwartet

while(condition){ 
    usleep(1) 
    while(condition){ 
     usleep(1) 
     // ... do stuff (sync) 
    } 
} 

althought i 1us für nur schlafen bin, die Schleife es nie einfach beenden sehr sehr lange Zeit dauern, aber wenn ich die Schlafanweisung entferne, läuft es einfach und fertig.

Ich versuche zu schlafen, um die CPU beruhigen und nicht 100% verwenden, so dass der Server andere Anfragen akzeptieren!

Die Verwendung von setTimeout innerhalb einer Schleife ist keine gute Idee, da setTimeout async ist.

Ich dachte, Rekursion, aber ich fürchte, es ist zu langsam sein, ich bin Iterieren arount 100000

+3

Bitte sagen Sie mir, das ist nicht Produktionscode, würde ich vorschlagen, herauszufinden, warum Ihre CPU ständig 100% brennen .. Was versuchst du genau zu tun? – Pogrindis

+0

Könntest du die Konsole auf die Nachricht "sleep: using busy loop fallback" überprüfen? wenn es vorhanden ist, fällt das Modul zurück auf "while ..." loop blocking –

+1

warum nicht setTimeout verwenden? –

Antwort

3

Schlaf blockiert den aktuellen Thread, so dass dies nicht effektiv helfen Sie versuchen, andere Anforderungen zu akzeptieren. Sie können etwas wie sleep-async versuchen, um den Job zu erledigen.

+0

das wird immer noch nicht sein Problem mit zu viel CPU beheben. –

+0

lustig genug, das sieht nicht wie die Antwort aus, aber es ist. Sie können nicht schlafen, um andere Anforderungen im Knoten zuzulassen, da der Knoten in seiner Standardkonfiguration single threaded ist, was das OP versucht. Schön gemacht. – deltree