thread agility и [ThreadStatic]
От: Andrej-V  
Дата: 17.07.08 17:34
Оценка:
Скажите пожалуйста, можно ли использовать статические переменные с атрибутом [ThreadStatic] в приложениях ASP.NET, для совместного использования их разными классами, если их инициализировать в начале каждого запроса. Или в этом случае thread agility может чего-то сделать нехорошее?
(Об использовании для сохранения состояния сеанса речи не идет — конечно нет).
Re: thread agility и [ThreadStatic]
От: TK Лес кывт.рф
Дата: 17.07.08 18:30
Оценка: 1 (1)
Здравствуйте, Andrej-V, Вы писали:

AV>Скажите пожалуйста, можно ли использовать статические переменные с атрибутом [ThreadStatic] в приложениях ASP.NET, для совместного использования их разными классами, если их инициализировать в начале каждого запроса. Или в этом случае thread agility может чего-то сделать нехорошее?


А какая конечная цель? Для ASP.NET приложения стоит рассмотреть использование HttpApplicationState или HttpContext
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re: thread agility и [ThreadStatic]
От: stump http://stump-workshop.blogspot.com/
Дата: 17.07.08 18:41
Оценка: 1 (1)
Здравствуйте, Andrej-V, Вы писали:

AV>Скажите пожалуйста, можно ли использовать статические переменные с атрибутом [ThreadStatic] в приложениях ASP.NET, для совместного использования их разными классами, если их инициализировать в начале каждого запроса. Или в этом случае thread agility может чего-то сделать нехорошее?

AV>(Об использовании для сохранения состояния сеанса речи не идет — конечно нет).
Нет, нельзя. Что-то нехорошее заключается в том, что обработка запроса может быть переброшена в другой поток (пресловутая Asp.net thread agility) практически на любой стадии работы ASP.NET конвеера, и там в вашей [ThreadStatic] переменной будет невесть что.
Подробно обсуждалось здесь
Понедельник начинается в субботу
Re[2]: thread agility и [ThreadStatic]
От: Andrej-V  
Дата: 17.07.08 19:40
Оценка:
Здравствуйте, stump, Вы писали:
S>Нет, нельзя. Что-то нехорошее заключается в том, что обработка запроса может быть переброшена в другой поток (пресловутая Asp.net thread agility) практически на любой стадии работы ASP.NET конвеера, и там в вашей [ThreadStatic] переменной будет невесть что.
Спасибо. Но тогда непонятно следующее, библиотеки фреймворка имеют классы с статик переменными помеченными атрибутами [ThreadStatic] (или я ошибаюсь?).Такие классы по вашему использовать в ASP нельзя?
Re[2]: thread agility и [ThreadStatic]
От: Andrej-V  
Дата: 18.07.08 09:45
Оценка:
Здравствуйте, TK, Вы писали:

TK>А какая конечная цель? Для ASP.NET приложения стоит рассмотреть использование HttpApplicationState или HttpContext


Спасибо. Цель простая — написать бизнес-логику (часть ее), которую можно использовать как в веб, так и в форм.
К примеру необходимо выполнять какие-то вычисления. Вычисления проводятся разными (скорее всего вложенными) классами. Тщательность этих вычислений, влияющая на вызов тех или иных ф--й (быстрых, но не точных или медленных, но более точных) хранится в переменной, доступной всем классам проводящих вычисления.
Другой пример. Много классов выполняют динамическое формирование рисунка. Объект Bitmap, на котором рисуется можно б быо сделать статическим с указанием [ThreadStatic]. То же относится к др. параметрам, как масштаб используемый шрифт и т.д.
Конечно можно сделать класс содержащий такие совместно используемые параметры и передавать его из ф-ии в ф-ю, но хочется узнать можно ли обойтись без этого (во входящей ф-ии происходит установка статических переменных в значения, которые ей передаются). При этом конечно такие статические переменные не используются для сохранения сеанса в веб,- бизнес-коду по барабану веб это или форм (а иногда и консоль).
Неужели ни один класс фреймворка нигде не использует изменяющиеся статические переменные?
Re[3]: thread agility и [ThreadStatic]
От: TK Лес кывт.рф
Дата: 18.07.08 12:33
Оценка:
Здравствуйте, Andrej-V, Вы писали:

AV>Неужели ни один класс фреймворка нигде не использует изменяющиеся статические переменные?


Очень собмневаюсь, что их там используют в описанном вами сценарии
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[4]: thread agility и [ThreadStatic]
От: Andrej-V  
Дата: 18.07.08 14:33
Оценка:
Здравствуйте, TK, Вы писали:

TK>Здравствуйте, Andrej-V, Вы писали:


AV>>Неужели ни один класс фреймворка нигде не использует изменяющиеся статические переменные?


TK>Очень собмневаюсь, что их там используют в описанном вами сценарии


Сценарий здесь ни при чем. (И естественно такого сценария в фреймворке нет.)
Вопрос в следующем: есть не readonly статические переменные во фреймворке? Да, — тогда такой класс использовать в ASP.NET нельзя. (Или нет ни одного синглтона?)
Re[5]: thread agility и [ThreadStatic]
От: C...R...a...S...H  
Дата: 18.07.08 20:49
Оценка:
Здравствуйте, Andrej-V, Вы писали:

AV>Вопрос в следующем: есть не readonly статические переменные во фреймворке? Да, — тогда такой класс использовать в ASP.NET нельзя. (Или нет ни одного синглтона?)

А почему синглтон должен быть ThreadStatic?
Там было написано русским по белому...
Re[6]: thread agility и [ThreadStatic]
От: Andrej-V  
Дата: 19.07.08 17:14
Оценка:
Здравствуйте, C...R...a...S...H, Вы писали:

CRA>А почему синглтон должен быть ThreadStatic?

А разве он вообще может быть статическим? Я про реализацию говорил.
Вы чего-нибудь по делу знаете?
Re[7]: thread agility и [ThreadStatic]
От: C...R...a...S...H  
Дата: 19.07.08 18:31
Оценка:
Здравствуйте, Andrej-V, Вы писали:

AV>А разве он вообще может быть статическим? Я про реализацию говорил.

AV>Вы чего-нибудь по делу знаете?
Я знаю что синглтон без проблем можно применять в asp.net, так же как и static переменные
Там было написано русским по белому...
Re[8]: thread agility и [ThreadStatic]
От: Andrej-V  
Дата: 20.07.08 07:40
Оценка:
Здравствуйте, C...R...a...S...H, Вы писали:

CRA>Я знаю что синглтон без проблем можно применять в asp.net, так же как и static переменные


Не могли бы подсказать источник. Или это из личного опыта?
Re[7]: thread agility и [ThreadStatic]
От: Lloyd Россия  
Дата: 20.07.08 10:59
Оценка:
Здравствуйте, Andrej-V, Вы писали:

CRA>>А почему синглтон должен быть ThreadStatic?

AV>А разве он вообще может быть статическим? Я про реализацию говорил.

А разве нет? Почему?
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[8]: thread agility и [ThreadStatic]
От: Andrej-V  
Дата: 20.07.08 15:29
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, Andrej-V, Вы писали:


CRA>>>А почему синглтон должен быть ThreadStatic?

AV>>А разве он вообще может быть статическим? Я про реализацию говорил.

L>А разве нет? Почему?


Я говорю про реализацию. Реализация не учитывает сделаете вы синглтон статическим или нет. Но слово static в реализации синглтона в любом случае присутствует.
Вы чего-нибудь по вопросу знаете? Есть статические переменные (или синглтоны) во фреймворке? И вообще статик (синглтоны) — зло?
Re[9]: thread agility и [ThreadStatic]
От: Lloyd Россия  
Дата: 20.07.08 17:19
Оценка:
Здравствуйте, Andrej-V, Вы писали:

CRA>>>>А почему синглтон должен быть ThreadStatic?

AV>>>А разве он вообще может быть статическим? Я про реализацию говорил.

L>>А разве нет? Почему?


AV>Я говорю про реализацию. Реализация не учитывает сделаете вы синглтон статическим или нет.


Что-то я не понял это предложение. Ты что хотел сказать-то?

AV>Но слово static в реализации синглтона в любом случае присутствует.


Смотря что вы имеете в виду под "в любом случае присутствует". Если у вас веб приложение, то ничто не меашет класть синглтон в Application и в этом случае "слово static" присутствовать не будет.

AV>Вы чего-нибудь по вопросу знаете? Есть статические переменные (или синглтоны) во фреймворке?


Есть, например, смотри TransactionManager в System.Transactions

AV>И вообще статик (синглтоны) — зло?


Так статик или синглтоны?
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[10]: thread agility и [ThreadStatic]
От: Andrej-V  
Дата: 20.07.08 21:56
Оценка:
Здравствуйте, Lloyd, Вы писали:

AV>>Я говорю про реализацию. Реализация не учитывает сделаете вы синглтон статическим или нет.


L>Что-то я не понял это предложение. Ты что хотел сказать-то?

Когда я упонянул первый раз про синглтон, я имел в виду, что его реализовать без использования статик нельзя и спрашивал, что, фрейморк нигде не содержит ни одного синглтона (если содержит, значит есть статик). Т.е. реализация синглтона обязана содержать статик.
Когда отвечал предыдущему автору, почему-то решил (ошибочно), что автор тоже про реализацию, про синглтон на основе статических классов (я таких не видел), а не про то, что синглтон, может быть статик объектом в программе ( это вроде к вопросу о реализации и о том, что обязаны быть статик в фрейморке если есть в нем реализации синглтонов не особо относится).

AV>>Но слово static в реализации синглтона в любом случае присутствует.


L>Смотря что вы имеете в виду под "в любом случае присутствует". Если у вас веб приложение, то ничто не меашет класть синглтон в Application и в этом случае "слово static" присутствовать не будет.

Lloid, как-то раз вы вместо ответа на вопрос написали, что вы не сторонник копи-паст. Так как вселенная когда-то потеряла симметрию, я сделаю копи-паст своего вопроса:
"Вопрос в следующем: есть не readonly статические переменные во фреймворке? Да, — тогда такой класс использовать в ASP.NET нельзя. (Или нет ни одного синглтона?)"

AV>>Вы чего-нибудь по вопросу знаете? Есть статические переменные (или синглтоны) во фреймворке?


L>Есть, например, смотри TransactionManager в System.Transactions

Спасибо. 1.Почему-то в рефлекторе не видно System.Transactions.dll, не подскажите как посмотреть.
2.Но вы уверены что их нет в других классах, и таких, которые можно воткнуть в код биснес-логики? И есть где-то рекомендация (а с учетом полученных в начале ответов даже требования), что при разработке библиотеки для бизнес-логики нельзя использовать не readonly статик.

AV>>И вообще статик (синглтоны) — зло?


L>Так статик или синглтоны?

Так как второе без первого невозможно, то мне кажется я правильно расставил приоритеты. А ответы, как всегда, пишутся по мере возможности, желания и наличия времени.
Re[11]: thread agility и [ThreadStatic]
От: Lloyd Россия  
Дата: 21.07.08 00:04
Оценка: 1 (1) +1
Здравствуйте, Andrej-V, Вы писали:

AV>>>Я говорю про реализацию. Реализация не учитывает сделаете вы синглтон статическим или нет.


L>>Что-то я не понял это предложение. Ты что хотел сказать-то?

AV>Когда я упонянул первый раз про синглтон, я имел в виду, что его реализовать без использования статик нельзя и спрашивал, что, фрейморк нигде не содержит ни одного синглтона (если содержит, значит есть статик). Т.е. реализация синглтона обязана содержать статик.

Утверждение неверное, смотри комментарий по поводу хранения экземпляра синглтона в HttpApplication.Items

AV>Когда отвечал предыдущему автору, почему-то решил (ошибочно), что автор тоже про реализацию, про синглтон на основе статических классов (я таких не видел),


Что такое "синглтон на основе статических классов"?

AV> а не про то, что синглтон, может быть статик объектом в программе ( это вроде к вопросу о реализации и о том, что обязаны быть статик в фрейморке если есть в нем реализации синглтонов не особо относится).


Что такое "статик объект"?

AV>>>Но слово static в реализации синглтона в любом случае присутствует.


L>>Смотря что вы имеете в виду под "в любом случае присутствует". Если у вас веб приложение, то ничто не меашет класть синглтон в Application и в этом случае "слово static" присутствовать не будет.

AV>Lloid, как-то раз вы вместо ответа на вопрос написали, что вы не сторонник копи-паст. Так как вселенная когда-то потеряла симметрию, я сделаю копи-паст своего вопроса:
AV>"Вопрос в следующем: есть не readonly статические переменные во фреймворке?

Есть

AV>Да, — тогда такой класс использовать в ASP.NET нельзя.


Почему?

AV>(Или нет ни одного синглтона?)"


Это тут при чем?

AV>>>Вы чего-нибудь по вопросу знаете? Есть статические переменные (или синглтоны) во фреймворке?


L>>Есть, например, смотри TransactionManager в System.Transactions

AV>Спасибо. 1.Почему-то в рефлекторе не видно System.Transactions.dll, не подскажите как посмотреть.

File -> Open cache -> System.Transactions

AV>2.Но вы уверены что их нет в других классах, и таких, которые можно воткнуть в код биснес-логики? И есть где-то рекомендация (а с учетом полученных в начале ответов даже требования), что при разработке библиотеки для бизнес-логики нельзя использовать не readonly статик.


Опять ничего не понял, переформулируй вопрос.

AV>>>И вообще статик (синглтоны) — зло?


L>>Так статик или синглтоны?

AV>Так как второе без первого невозможно, то мне кажется я правильно расставил приоритеты.

второе без первого возможно. смортри комментарий про HttpApplication.Items

AV>А ответы, как всегда, пишутся по мере возможности, желания и наличия времени.


Это ты про чьи ответы? Про мои или про свои?
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re: thread agility и [ThreadStatic]
От: adontz Грузия http://adontz.wordpress.com/
Дата: 21.07.08 00:04
Оценка: +2
Здравствуйте, Andrej-V, Вы писали:

Какое-то бредовое обсуждение пошло.
Вобщем в фреймворке нет синглтонов в контексте потока. Есть только синглтоны в контексте процесса. Соответсвенно в ASP.Net можно использовать что угодно. А что надо вам даже для меня загадка
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[12]: thread agility и [ThreadStatic]
От: Andrej-V  
Дата: 21.07.08 12:19
Оценка:
Здравствуйте, Lloyd, Вы писали:

AV>>Когда я упонянул первый раз про синглтон, я имел в виду, что его реализовать без использования статик нельзя и спрашивал, что, фрейморк нигде не содержит ни одного синглтона (если содержит, значит есть статик). Т.е. реализация синглтона обязана содержать статик.


L>Утверждение неверное, смотри комментарий по поводу хранения экземпляра синглтона в HttpApplication.Items


Жизнь ломает. И я уже спокойно в энный раз пишу, что я про статик и бизнес-логику. И в зн+1-й раз я про статик во фпеймворке. При чем здесь HttpApplication.Items? Я в эн +2-й раз я про статик в бизнес-логике, которую можно подсоединять хоть в веб. хоть в форм, хоть в консоль. В эн +3-й раз я про статик и синглтоны во фреймворк-классах, если есть снглтон в таких классах и их можно использовать в бизнес-логике, такие синглтоны обязаны содержать статик.
В эн +4-й раз: мой главный вопрос — можно ли использовать статик в бизнес логике? Если для форм — OK, то для веб — похоже такую библиотеку подсоединять нельзя, а логику следут писать только с передачей параметров в ф-ии (при этом для сохранения параметры, пердаваемые в бизнес-логику можно хранить используя состояние приложения, состояние сеанса, — это к моему вопросу никак не относится). В н+273-й раз: можно ли использовать статик в бизнес локике (которая ничего не знает про HttpApplication.Items), зная, что она может быть прикручена к обработке веб?

AV>>Когда отвечал предыдущему автору, почему-то решил (ошибочно), что автор тоже про реализацию, про синглтон на основе статических классов (я таких не видел),


L>Что такое "синглтон на основе статических классов"?


Я ж сказал, что ошибся, подумав что автор, которому отвечал, написал про реализацию синглтонов на основе классов (не объектов) помеченных как статик. Про это и написал, что таких не видел.

L>Что такое "статик объект"?

Я имел в виду статическую переменную типа какого-нибудь класса. А ты б как назвал?

AV>>>>Но слово static в реализации синглтона в любом случае присутствует.


L>>>Смотря что вы имеете в виду под "в любом случае присутствует". Если у вас веб приложение, то ничто не меашет класть синглтон в Application и в этом случае "слово static" присутствовать не будет.

Я в н+5-й раз..., и в н+13-й раз..., и в н+последний китайский, и в н+ 114, и в н+ 6-й...

AV>>"Вопрос в следующем: есть не readonly статические переменные во фреймворке?


L>Есть


AV>>Да, — тогда такой класс использовать в ASP.NET нельзя.


L>Почему?


Я как-то вклинился в тему http://www.sql.ru/forum/actualthread.aspx?tid=560684&amp;hl , — тоже Andrej-V, может там сформулировал более ясно?
Посмотри ответ от stump (3-й от начала), прочти статью указанную в нем. Там полно сленга. Фраза,которую мне помогли перевести:

So for your business objects, either you're stuck with the "if(HttpContext.Current!=null)" and the System.Web reference (yuck) or you've got to come up with some kind of provider model for your static persistence, which will need setting up prior to the point that any of these singletons are accessed. Double yuck.


Итак, для ваших бизнес-объектов, вам либо ничего не остается, кроме как использовать "if(HttpContext.Current!=null)" и System.Web reference (фу, какая гадость), либо вам придется придумать какую-то provider model для вашей static persistence, которую нужно будет установить/проинициализировать до попыток доступа к любому из этих singletons. Тьфу два раза.

Насколько я понял, атрибут [TreadStatic] действителен для потока. Но бизнес-логика может выполняеться для одного запроса (а не для сеанса, — там тем более) сначала в одном, а потом в другом потоке. Поэтому такая статик не сохраняется в течение обработки запроса. И надо делать чего-то еще, кроме ее инциализации и реализации очиски по окнчании запроса. В любом случае, как я понял, если вы написали класс для бизнес-логики со статик (или используете готовый класс фреймворка со статик) — могут быть проблемы.
Вот почему.
Или я неправ?

AV>>(Или нет ни одного синглтона?)"


L>Это тут при чем?


Я в н+ -й раз..., и в н+...Зря этот форум не читает Жванецкий.

AV>>Спасибо. 1.Почему-то в рефлекторе не видно System.Transactions.dll, не подскажите как посмотреть.


L>File -> Open cache -> System.Transactions


СПАСИБО.

AV>>2.Но вы уверены что их нет в других классах, и таких, которые можно воткнуть в код биснес-логики? И есть где-то рекомендация (а с учетом полученных в начале ответов даже требования), что при разработке библиотеки для бизнес-логики нельзя использовать не readonly статик.


L>Опять ничего не понял, переформулируй вопрос.


Да ну его на хрен, этот вопрос.

L> смортри комментарий про HttpApplication.Items


Обязательно посмотрю.

AV>>А ответы, как всегда, пишутся по мере возможности, желания и наличия времени.


L>Это ты про чьи ответы? Про мои или про свои?

Понедельник. Сплошной. Ты меня спросил, на что ответить. Я намекнул, что желательно на все по-порядку, при наличии того, что указал. (Хотя, в общем, фраза применима ко всем, в том числе и ко мне).
Re[13]: thread agility и [ThreadStatic]
От: Lloyd Россия  
Дата: 21.07.08 12:26
Оценка:
Здравствуйте, Andrej-V, Вы писали:

Извини, но я не буду отвечать на твой пост. Я не понимаю язык на котором ты говоришь.
... << RSDN@Home 1.2.0 alpha rev. 786>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.