Почему в ColdFusion дочерний поток Set & Forget не должен иметь доступа к областям сеансов / клиентов? - PullRequest
4 голосов
/ 09 сентября 2009

Потоки, порожденные от родительского процесса в ColdFusion, имеют доступ к областям Session и Client, но только до тех пор, пока родительский процесс не завершится; поэтому, если поток продолжает работать после этого времени, попытка чтения или записи в одну из этих областей, вероятно, приведет к ошибке.

Почему?

Я понимаю, что в области видимости клиента это может храниться в разных местах, включая файлы cookie, поэтому дочернему потоку потребуется доступ к родительскому процессу для установки заголовков, которые будут влиять на файлы cookie; но область действия сеанса всегда хранится в памяти и определяется значениями cfid / cftoken или jsessionid, которые не изменились бы при нормальных обстоятельствах.

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

Например, я хочу запустить длительную хранимую процедуру, когда пользователь входит в систему, и сохранить результат в своем сеансе для доступа через Query of Queries на нескольких других страницах. За исключением этой хранимой процедуры, логин обрабатывается более или менее мгновенно; поэтому, добавив proc, логин замедляется. Если бы я мог создать поток Set - & - Forget для запуска процедуры и сохранения результата в сеансе, это было бы идеально. Я понимаю, что в этом случае возможно, что результат понадобится до того, как он будет сохранен, но я бы обдумал это.

Итак, если есть веская причина заблокировать это, что это?

1 Ответ

1 голос
/ 12 сентября 2009

Я бы предположил (и это только предположение), что ссылки на постоянные области преднамеренно будут недоступны. Адам и команда были бы лучшими, чтобы ответить на это, и Майк Брант мог бы, вероятно, вмешаться, но я думаю, что это сводится к управлению памятью JVM. Ссылки на эти области могут потенциально использовать вашу память через процессы, которые по сути скрыты.

Я провожу много времени, наблюдая за серверами с помощью FusionReactor. Я видел случаи, когда процесс никогда не прерывался, и было обнаружено, что он работает несколько дней спустя. Это было довольно редко, но происходило много раз и обычно было связано с потоком доступа к базе данных, где база данных отбрасывала промежуточный поток соединения. Теперь представьте несколько подобных инцидентов, получающих доступ к этим областям, и вы не можете их найти. В этот момент вы создали свою собственную утечку памяти, которую почти невозможно отследить.

Но, я думаю. Чистая спекуляция. Я слышу ваше разочарование, и я думаю, что вы обязательно должны передать этот вопрос Адаму и команде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...