Что происходит с контекстом обработчика событий прослушивателя, когда внутри него вызывается функция?

1

У меня есть метод, который порождает дочерний процесс, у которого есть слушатели событий и обработчики внутри него.

Мой вопрос:

  1. Что будет с контекстом метода (памятью), когда я повторно вызову метод внутри обработчика событий внутри него?
  2. Будет ли сборщик мусора очищать контекст метода или он останется в памяти, пока не будет создано все приложение

    import { spawn } from 'child_process';
    class SomeThing {
    initChildProcess() {
      const childProcess = spawn('go', [ 'run', 'awesome.go' ])
      // what will happen to this context
      // will garbage collector clear it?
      childProcess.once('close', () => {
        // when I re-invoked it inside this event handler?
        this.initChildProcess()
      })
     }
    }
    
Теги:

1 ответ

1
Лучший ответ

С кодом, который вы показываете, как только ваш внутренний вызов this.initChildProcess() вернется (что будет быстро, потому что spawn() асинхронный), тогда ваш первоначальный вызов initChildProcess() будет выполнен, и объект childProcess из этого вызова будет находиться в закрытом состоянии и без дополнительных прослушивателей событий (или событий, которые могут произойти), поэтому он будет иметь право на сборку мусора.

Что будет с контекстом метода (памятью), когда я повторно вызову метод внутри обработчика событий внутри него?

Смотрите выше условия для сбора мусора. С тем, что вы показываете, это будет мусор. Повторный вызов не имеет никакого отношения к контексту, связанному с исходным вызовом.

Будет ли сборщик мусора очищать контекст метода или он останется в памяти, пока не будет создано все приложение

Это очистит это. Второй вызов spawn() не имеет ссылки на код первого, поэтому первый будет иметь право на сборку мусора, как только будет выполнен собственный код, стоящий за первым spawn() или как только у вас больше не будет прослушивателей событий в первом объект childProcess. Это сделает объект childProcess недоступным для любого кода и, следовательно, пригодным для сборки мусора.

  • 0
    спасибо за объяснения.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню