Dlaczego wyjątek powodowałby wycieki zasobów w Node.js?
Jeśli spojrzysz na początek Node.jsdokumentacja dla domen w Stanach:
Z samej natury sposobu, w jaki rzut działa w JavaScript, prawie nigdy nie ma sposobu, aby bezpiecznie „podnieść się tam, gdzie skończyłeś”, bez przecieków referencji lub tworząc jakiś inny niezdefiniowany stan kruchy.
Ponownie w przykładzie kodu podanym w tej pierwszej sekcji jest napisane:
Chociaż zapobiegliśmy ponownemu uruchomieniu procesu, wyciekamy zasoby jak szalone
Chciałbym zrozumieć, dlaczego tak jest? Jakie zasoby wyciekają? Zalecają, aby używać tylko domen do przechwytywania błędów i bezpiecznego zamykania procesu. Czy jest to problem ze wszystkimi wyjątkami, nie tylko podczas pracy z domenami? Czy rzucanie i łapanie wyjątków w Javascript jest złą praktyką? Wiem, że jest to wspólny wzór w Pythonie.
EDYTOWAĆ
Rozumiem, dlaczego w języku nieobsługiwanym przez śmieci mogą występować wycieki zasobów, jeśli zostanie zgłoszony wyjątek, ponieważ nie zostanie uruchomiony żaden kod, który można uruchomić w celu oczyszczenia obiektów, jeśli zgłoszony zostanie wyjątek.
Jedynym powodem, jaki mogę sobie wyobrazić za pomocą Javascript jest to, że rzucanie wyjątku przechowuje odwołania do zmiennych w zakresie, w którym został zgłoszony wyjątek (a może i rzeczy w stosie wywołań), zachowując w ten sposób odniesienia dookoła, a następnie obiekt wyjątku jest przechowywany i nigdy zostaje oczyszczony. Chyba że wyciekające zasoby są zasobami wewnętrznymi silnika.
AKTUALIZACJA
Napisałem blog wyjaśniający odpowiedź na to pytanie nieco lepiej teraz.Sprawdź to