В Erlang можно ли автоматически активировать функцию очистки, когда все ссылки на ресурс уходят? Например, будет ли закрыт собственный дескриптор файла, вызванный вызовом file:open/2
, если file:close/1
никогда не вызывается? Если это возможно, как это делается? Если это невозможно, есть ли иудиомы Erlang, которые делают утечки ресурсов подобным образом, это не проблема?Очистка ресурсов в Erlang
2
A
ответ
5
Из file
documentation:
IoDevice действительно Идентификатор процесса, который обрабатывает файл. Этот процесс связан с процессом, который первоначально открыл файл. Если какой-либо процесс, с которым связана связь IoDevice, завершается, файл будет закрыт, и сам процесс будет завершен. IoDevice, возвращенный из этого вызова, может использоваться как аргумент для функций ввода-вывода (см. Io (3)).
Итак, если процесс, который открыл файл, файл будет автоматически закрыт.
Если вы используете OTP, и вы хотите быть абсолютно уверены, что ваш файл был закрыт, когда ваш процесс умирает, добавьте file:close
в функцию terminate
. Конечно, ваш gen_ * должен быть прикреплен к супервизору.
Смежные вопросы
- 1. Очистка ресурсов
- 2. .NET Timer - Очистка ресурсов
- 3. Очистка содержимого файла ресурсов (IFile)
- 4. Очистка списка ресурсов XHR в отладчике Chrome
- 5. Очистка ресурсов, связанных со слабым ссылкой
- 6. JVM аномальный выход - очистка системных ресурсов
- 7. VS2010 Изображения ресурсов НЕ очистка от проекта
- 8. Очистка ресурсов при внезапном отключении службы WCF.
- 9. Очистка ресурсов с помощью сеанса Hive Закрыть
- 10. WPF - Очистка только определенных Словари ресурсов
- 11. Очистка неуправляемых ресурсов из сеанса, например, Crystal Report Document
- 12. Очистка ресурсов MySQL с использованием WHERE x IN (1,2,3)
- 13. Erlang - C и Erlang
- 14. Erlang: Как преобразовать дату erlang в двоичный?
- 15. Erlang, соединяющие узлы через Интернет в Erlang
- 16. mongodb-erlang Примеры драйверов Erlang
- 17. python pexpect очистка или очистка строки
- 18. Очистка данных в R
- 19. Очистка SurfaceView в android
- 20. Очистка HTML в iOS
- 21. Надежная очистка в Mathematica
- 22. Очистка jQuery в рельсах
- 23. Очистка в HG репо
- 24. Очистка кода в netbeans
- 25. Очистка изображений в matlab
- 26. Очистка каталога в Linux
- 27. Очистка таблицы в короне
- 28. Очистка DbProviderFactories в App.config
- 29. Очистка репозиториев в GitExtensions
- 30. очистка массива в javascript
Я думаю, что получаю. Поэтому, если у вас есть код, управляющий ресурсом (например, файл), вы «связываете/1» свой процесс с процессом собеседника. Таким образом, ваш код может обрабатывать выходной сигнал, когда вызываемый абонент заканчивает и очищает. Я полагаю, что поддержка обратного вызова, подобранного финализатором, не будет, если обработчик ресурсов (например, IoDevice) должен быть собран в мусор, даже когда процесс вызова продолжается. И, если это так, использование процессов мелкозернистым способом - это хорошая практика для минимизации утечек ресурсов (среди других причин). –
Если ваш процесс является долгоживущим, и вы используете этот файл только на короткий период времени, вы должны напрямую вызвать функцию закрытия. Если возникает ошибка и ваш процесс умирает, файл будет закрыт автоматически, нет необходимости в явной ссылке. – Isac
@FrankHunleth: для обратного вызова, подобного комментарию, смотрите выражение 'after' в выражении [' try'] (http://www.erlang.org/doc/reference_manual/expressions.html#id78318). Он был добавлен к языку в последнее время, но это не является предпочтительным способом, как это сделать. Нерестовые процессы и мониторинг или связывание более удобны. –