Tak więc, w javascript, ponieważ jest to spowodowane zdarzeniami z natury, wydaje się, że setTimeout nie blokuje. Oznacza to, że jeśli to zrobić:non-blocking setTimeout w javascript vs sleep in ruby
setTimeout(function(){
console.log('sleeping');
}, 10);
console.log('prints first!!');
Będzie wyjście 'prints first!!'
a następnie 'sleeping'
.
Js interpreter nie będzie czekać, aż setTimeout zostanie wykonane, zamiast tego wykonuje kawałek kodu pod nim od razu. Po 10 ms następuje wywołanie funkcji zwrotnej.
Teraz ostatnio bawię się z rubinem. Wiem, że ma on nieblokujące wsparcie w bibliotece zdarzeń-maszyn. Ale zastanawiam się, czy możemy osiągnąć coś podobnego do przykładu setTimeout, który właśnie napisałem w javascript z sleep
lub jakąkolwiek inną funkcję w rubu natywnie bez obsługi event-machine? Czy to w ogóle możliwe przy użyciu procesu zamknięcia lub bloku? Dzięki.
Tak, nie wygląda na to, że wątek będzie czymś, z czego będę korzystać. Wiem, że asynchronizacja musi być zrobiona z maszyną zdarzeń, ale byłem po prostu ciekawy. dzięki –
Duży problem z wątkami wyzwalającymi asynchroniczne wywołania zwrotne próbuje wymusić wykonanie tego bloku wywołania zwrotnego na wątku wywołującym. Jest to trudne, chyba że masz odpowiednią pętlę zdarzeń, gdzie są dobrze zdefiniowane miejsca do ich wykonania. – tadman