2009-11-03 3 views

ответ

1

Это зависит от ресурса и как конечная точка для этого ресурса имеет дело с этим. Для соединений с базой данных сервер базы данных будет прослушивать и ждать каких-либо сообщений, сколько бы он ни был настроен для ожидания (вероятно, не очень долгого), а затем прекратить сокет. Файлы могут потенциально застревать в заблокированном («используется другим процессом») состоянии, но IME это крайне редко.

1

То же самое, что происходит при сбое приложения native (C/C++/etc).

По большей части операционная система немедленно очистится. Он закроет файловые дескрипторы, мьютексы, сетевые подключения и любые другие вещи, за которые отвечает ОС.

Для других ресурсов, не предоставленных ОС (например, подключение к SQL-серверу), зависит от того, какая часть программного обеспечения отвечает за этот ресурс. Как упоминает Rex M, SQL-сервер будет сидеть там до тех пор, пока время соединения не закончится, а затем оно будет выпущено, но другое стороннее программное обеспечение может действовать по-другому.

Это может вызвать проблемы, если вы получаете некоторый неуправляемый ресурс от дерьмовой части стороннего программного обеспечения, поскольку он может быть недостаточно умен, чтобы использовать таймауты или аналогичный механизм, а неуправляемый ресурс может просто никогда не появляться ,

Это может также вызвать проблемы, если ваше стороннее программное обеспечение имеет длительные таймауты. Например, если тайм-аут соединения сервера SQL составляет 20 минут, и вы крадете 20 раз за 2 минуты, тогда у вас есть 20 «использованных» соединений, которые сидят там до тех пор, пока не произойдет тайм-аут. Вы можете запускать себя из связей, делая такие вещи.

Смежные вопросы