|
|
|
ASP.NET MVC3 и многопоточность выполняемого кода
|
|||
|---|---|---|---|
|
#18+
Продумываю архитектуру приложения на ASP.NET MVC 3. Интересует вопрос многопоточности, а именно: Допустим, я в контроллере определю private-поле SqLConnection, а в конструкторе контроллера буду творить что-то типа: Код: plaintext 1. 2. А дальше в коде самих action'ов использовать уже это соединение. Но прокатит ли такое при одновременном выполнении нескольких action'ов? Каждый http-запрос получит свою копию контроллера с открытым коннектом или же на все потоки будет один экземпляр контроллера? Какой best practice в подобной ситуации? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2011, 19:19:13 |
|
||
|
ASP.NET MVC3 и многопоточность выполняемого кода
|
|||
|---|---|---|---|
|
#18+
P.S. При дебаге я вижу, что контроллер создается каждый раз заново, но уверен, что это не дает ответ на мой вопрос. Мало ли, как оно на продакшен-схемах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2011, 19:22:15 |
|
||
|
ASP.NET MVC3 и многопоточность выполняемого кода
|
|||
|---|---|---|---|
|
#18+
тут вот такое пишут ссылка предоставлена в соседней ветке http://codeclimber.net.nz/archive/2009/10/27/12-asp.net-mvc-best-practices.aspx 2 – Isolate Controllers from the outside World Dependencies on the HttpContext, on data access classes, configuration, logging, clock, etc… make the application difficult (if not impossible) to test, to evolve and modify. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2011, 19:34:11 |
|
||
|
ASP.NET MVC3 и многопоточность выполняемого кода
|
|||
|---|---|---|---|
|
#18+
Winnipuh, Спасибо за ответ! Что-то по ссылке таймаут. Я прочитаю, как только этот URL будет доступен. По поводу "difficult to test" не страшно. Мой пример несколько утрирован. Я постараюсь использовать IoC, чтобы убрать подобные зависимости, но сути вопроса это не меняет. Я хочу понять, работаю ли я с отдельным экземпляром контроллера или же он доступен из нескольких потоков одновременно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2011, 19:51:58 |
|
||
|
ASP.NET MVC3 и многопоточность выполняемого кода
|
|||
|---|---|---|---|
|
#18+
PilotWinnipuh, Спасибо за ответ! Что-то по ссылке таймаут. Я прочитаю, как только этот URL будет доступен. По поводу "difficult to test" не страшно. Мой пример несколько утрирован. Я постараюсь использовать IoC, чтобы убрать подобные зависимости, но сути вопроса это не меняет. Я хочу понять, работаю ли я с отдельным экземпляром контроллера или же он доступен из нескольких потоков одновременно. ссылка доступна... но я так понимаю, чот контроллер не то место, где вообще надо доступ к базе делать, надо в модели ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2011, 20:15:11 |
|
||
|
ASP.NET MVC3 и многопоточность выполняемого кода
|
|||
|---|---|---|---|
|
#18+
Winnipuh, Ладно, я перефразирую вопрос :) Дано: 1) приватное поле в контроллере 2) создание инстанса для этого поля происходит в конструкторе контроллера. Вопрос: При обращении к этому приватному полю в теле action'a я работаю с отдельной копией объекта или же она расшарена между потоками, и нужно принимать во внимание многопоточность? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2011, 20:58:49 |
|
||
|
ASP.NET MVC3 и многопоточность выполняемого кода
|
|||
|---|---|---|---|
|
#18+
PilotКакой best practice в подобной ситуации? Код: plaintext 1. 2. 3. 4. msdn ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2011, 02:08:07 |
|
||
|
ASP.NET MVC3 и многопоточность выполняемого кода
|
|||
|---|---|---|---|
|
#18+
PilotПри обращении к этому приватному полю в теле action'a я работаю с отдельной копией объекта или же она расшарена между потоками, и нужно принимать во внимание многопоточность? С отдельной копией в разрезе POST-запроса клиента. Более того, можете не утруждать себя этой заморочкой, ASP.NET сам по себе многопоточен, и если ему нужно будет, он в пуле потков создаст еще один поток. Единственное, где можно нарваться на проблему, это статические (читай глобальные) методы. Если очень нужнат статика, - курим потокобезопасный синглтон. А вообще лучше страраться не использовать статику в бизнесе (простые не зависящие от контекста хелперы и иже не в счет). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2011, 08:55:06 |
|
||
|
ASP.NET MVC3 и многопоточность выполняемого кода
|
|||
|---|---|---|---|
|
#18+
МСУВ разрезе GET/POST-запроса клиента. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2011, 08:56:04 |
|
||
|
ASP.NET MVC3 и многопоточность выполняемого кода
|
|||
|---|---|---|---|
|
#18+
Не понимаю зачем нужна многопоточность в аспнет. Ведь страница формируется один раз и при её формировании уже все данные должны быть в наличии и разложены по полочкам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2011, 09:43:42 |
|
||
|
ASP.NET MVC3 и многопоточность выполняемого кода
|
|||
|---|---|---|---|
|
#18+
ShSergeНе понимаю зачем нужна многопоточность в аспнет. Ведь страница формируется один раз и при её формировании уже все данные должны быть в наличии и разложены по полочкам. http://www.codeproject.com/Articles/38501/Multi-Threading-in-ASP-NET http://blogs.msdn.com/b/alikl/archive/2008/06/23/improve-asp-net-performance-with-multithreading-using-thread-or-threadpool-objects.aspx ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2011, 11:05:55 |
|
||
|
ASP.NET MVC3 и многопоточность выполняемого кода
|
|||
|---|---|---|---|
|
#18+
МСУShSergeНе понимаю зачем нужна многопоточность в аспнет. Ведь страница формируется один раз и при её формировании уже все данные должны быть в наличии и разложены по полочкам. http://www.codeproject.com/Articles/38501/Multi-Threading-in-ASP-NET http://blogs.msdn.com/b/alikl/archive/2008/06/23/improve-asp-net-performance-with-multithreading-using-thread-or-threadpool-objects.aspx Аякс и хендлеры - это понятно. А при формировании страницы это зачем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2011, 11:17:15 |
|
||
|
ASP.NET MVC3 и многопоточность выполняемого кода
|
|||
|---|---|---|---|
|
#18+
ShSergeАякс и хендлеры - это понятно. А при формировании страницы это зачем? ThreadPool.QueueUserWorkItem, ManualResetEvent, WaitCallback. Причём тут "аякс и хендлеры"? Еще раз прочитайте вторую ссылку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2011, 11:38:01 |
|
||
|
ASP.NET MVC3 и многопоточность выполняемого кода
|
|||
|---|---|---|---|
|
#18+
МСУ, Alik Levin - прикольно, особенно, если учесть, что написана явная глупость, хотя умные мысли тоже имеются, но, как обычно для левитов, очень редко и фильтровать нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2011, 19:21:10 |
|
||
|
ASP.NET MVC3 и многопоточность выполняемого кода
|
|||
|---|---|---|---|
|
#18+
ShSergeнаписана явная глупость Не понял. Какая глупость? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2011, 20:31:31 |
|
||
|
ASP.NET MVC3 и многопоточность выполняемого кода
|
|||
|---|---|---|---|
|
#18+
МСУ, Давайте не так. Давайте Вы, мне дураку, объясните зачем нужна многопоточность. Левиты здесь - точно не авторитеты. Да, я это использовал в десктопных приложениях. Обычно, было связано с отрисовкой. Объясните зачем это в вэбе? Ну, я не со зла. Просто, давайте разберёмся на примерчике. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2011, 21:29:25 |
|
||
|
ASP.NET MVC3 и многопоточность выполняемого кода
|
|||
|---|---|---|---|
|
#18+
ShSerge, я же Вам рекомендовал почитать вторую ссылку на http://blogs.msdn.com... Real world scenarioYou need to run 3 independent heavy database queries – Q1, Q2, Q3. You need to use the result from the three – Result = Q1+Q2+Q3. You never know the order in which each query completes. It can be: Q1Q2Q3, Q1Q3Q2, Q2Q3Q1, Q2Q1Q3, Q3Q2Q1, Q3Q1Q2. Missed any combination? Run one after another would create significant latency. Running each on its own thread would create latency of Max(Q1,Q2,Q3) which is less that sum of the three. How to run each query on its own thread and wait for the completion for each one? Перевод трэбэ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2011, 22:15:48 |
|
||
|
ASP.NET MVC3 и многопоточность выполняемого кода
|
|||
|---|---|---|---|
|
#18+
МСУ, Нет, не надо переводить. Вот там же написано, что нужен результат всех трёх запросов, которые друг от друга не зависят. Может быть какая-то выгода в этом и есть, но в том и только в том случае, если запросы - очень тяжёлые и ничего или почти нечего не возвращают, но даже в этом случае, насчёт Max(Q1, Q2, Q3) - это вряд-ли. Даже если допустить, что все три запроса будут исполняться каждый на своём процессоре, впрочем, там об этом написано. А в общем случае - имхо, только тормозить будет и ничего хорошего не получится, только программисту дополнительный гемор. Короче, на месте топикстартера, я бы этим не занимался бы. Гораздо эффективнее - оптимизация самих запросов. А в первой ссылочке - я согласен. Но там совсем не та многопоточность, как раз она совсем вопросов не вызывает и вполне законно используется всеми. Некоторые даже об этом не подозревают, например когда грузят ресурсы контрольев. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2011, 13:47:48 |
|
||
|
ASP.NET MVC3 и многопоточность выполняемого кода
|
|||
|---|---|---|---|
|
#18+
ShSergeМожет быть какая-то выгода в этом и есть, но в том и только в том случае, если запросы - очень тяжёлые и ничего или почти нечего не возвращают Ну вот, Вы сами ответили на свой вопрос. И не "может какая-то выгода", а абсолютная выгода для длительных операций (не обязательно с БД). ShSergeно даже в этом случае, насчёт Max(Q1, Q2, Q3) - это вряд-ли. Не понял, эт Вы о чем? ShSergeА в общем случае - имхо, только тормозить будет и ничего хорошего не получится, только программисту дополнительный гемор. На основе каких умозаключений сделано предположение о тормозах? Еще раз - есть долговыполняющаяся операция. Зачем клиенту ждать ее окочания? По окончанию операции можно увемомить клиента (реализуется через ajax + timer), а можно не уведомлять. ShSergeКороче, на месте топикстартера, я бы этим не занимался бы. Гораздо эффективнее - оптимизация самих запросов. Во-первых, запросы могут быть и так уже оптимизированы. Во-вторых, долговыполняющаяся операция может быть связана не только с БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2011, 15:16:45 |
|
||
|
ASP.NET MVC3 и многопоточность выполняемого кода
|
|||
|---|---|---|---|
|
#18+
ShSergeКороче, на месте топикстартера, я бы этим не занимался бы. Гораздо эффективнее - оптимизация самих запросов. Разговор сильно ушел в сторону :) Топикстартер НЕ занимается вопросом увеличения быстродействия с помощью параллельного выполнения кода. Я хочу понять, как происходит инициализация контроллеров. Как singleton или на каждый http-запрос новая копия? Если первое, то не нужно ли мне заботится о том, чтобы мой код не вызывал коллизий и дэдлоков при исполнении сразу несколькими потоками IIS'а? (по одному потоку на каждый http-запрос) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2011, 17:39:30 |
|
||
|
ASP.NET MVC3 и многопоточность выполняемого кода
|
|||
|---|---|---|---|
|
#18+
Pilot, Уже вроде написали, копия на каждый запрос, после отработки копия уничтожается, и нужно следить за нормальным закрытием соединения с базой, так как пул у вас не бесконечный. Зачем открывать соединение в конструкторе? А если в экшоне не потребуется подключение к базе, к примеру запрос валидацию не пройдет, на кой вы соединение открыли? Бест практис это c DAL работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2011, 18:32:18 |
|
||
|
|

start [/forum/topic.php?fid=18&msg=37502001&tid=1360414]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
1ms |
| others: | 229ms |
| total: | 370ms |

| 0 / 0 |
