Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / ASP.NET MVC3 и многопоточность выполняемого кода / 21 сообщений из 21, страница 1 из 1
27.10.2011, 19:19:13
    #37501427
Pilot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC3 и многопоточность выполняемого кода
Продумываю архитектуру приложения на ASP.NET MVC 3.
Интересует вопрос многопоточности, а именно:
Допустим, я в контроллере определю private-поле SqLConnection, а в конструкторе контроллера буду творить что-то типа:
Код: plaintext
1.
2.
  this.mySqlConnection = new SqlConnetion(..);
  this.mySqlConnection.Open();

А дальше в коде самих action'ов использовать уже это соединение.
Но прокатит ли такое при одновременном выполнении нескольких action'ов?
Каждый http-запрос получит свою копию контроллера с открытым коннектом или же на все потоки будет один экземпляр контроллера?

Какой best practice в подобной ситуации?
...
Рейтинг: 0 / 0
27.10.2011, 19:22:15
    #37501434
Pilot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC3 и многопоточность выполняемого кода
P.S. При дебаге я вижу, что контроллер создается каждый раз заново, но уверен, что это не дает ответ на мой вопрос.
Мало ли, как оно на продакшен-схемах.
...
Рейтинг: 0 / 0
27.10.2011, 19:34:11
    #37501457
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC3 и многопоточность выполняемого кода
тут вот такое пишут
ссылка предоставлена в соседней ветке
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.
...
Рейтинг: 0 / 0
27.10.2011, 19:51:58
    #37501470
Pilot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC3 и многопоточность выполняемого кода
Winnipuh,

Спасибо за ответ! Что-то по ссылке таймаут. Я прочитаю, как только этот URL будет доступен.
По поводу "difficult to test" не страшно. Мой пример несколько утрирован. Я постараюсь использовать IoC, чтобы убрать подобные зависимости, но сути вопроса это не меняет.
Я хочу понять, работаю ли я с отдельным экземпляром контроллера или же он доступен из нескольких потоков одновременно.
...
Рейтинг: 0 / 0
27.10.2011, 20:15:11
    #37501506
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC3 и многопоточность выполняемого кода
PilotWinnipuh,

Спасибо за ответ! Что-то по ссылке таймаут. Я прочитаю, как только этот URL будет доступен.
По поводу "difficult to test" не страшно. Мой пример несколько утрирован. Я постараюсь использовать IoC, чтобы убрать подобные зависимости, но сути вопроса это не меняет.
Я хочу понять, работаю ли я с отдельным экземпляром контроллера или же он доступен из нескольких потоков одновременно.

ссылка доступна... но я так понимаю, чот контроллер не то место, где вообще надо доступ к базе делать, надо в модели
...
Рейтинг: 0 / 0
27.10.2011, 20:58:49
    #37501560
Pilot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC3 и многопоточность выполняемого кода
Winnipuh,
Ладно, я перефразирую вопрос :)
Дано:
1) приватное поле в контроллере
2) создание инстанса для этого поля происходит в конструкторе контроллера.

Вопрос:
При обращении к этому приватному полю в теле action'a я работаю с отдельной копией объекта или же она расшарена между потоками, и нужно принимать во внимание многопоточность?
...
Рейтинг: 0 / 0
28.10.2011, 02:08:07
    #37501796
Starlex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC3 и многопоточность выполняемого кода
PilotКакой best practice в подобной ситуации?

Код: plaintext
1.
2.
3.
4.
using (SqlConnection connection = new SqlConnection(connectionString))
    {
        connection.Open();
        // Do work here; connection closed on following line.
    }

msdn
...
Рейтинг: 0 / 0
28.10.2011, 08:55:06
    #37501944
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC3 и многопоточность выполняемого кода
PilotПри обращении к этому приватному полю в теле action'a я работаю с отдельной копией объекта или же она расшарена между потоками, и нужно принимать во внимание многопоточность?
С отдельной копией в разрезе POST-запроса клиента. Более того, можете не утруждать себя этой заморочкой, ASP.NET сам по себе многопоточен, и если ему нужно будет, он в пуле потков создаст еще один поток.
Единственное, где можно нарваться на проблему, это статические (читай глобальные) методы. Если очень нужнат статика, - курим потокобезопасный синглтон. А вообще лучше страраться не использовать статику в бизнесе (простые не зависящие от контекста хелперы и иже не в счет).
...
Рейтинг: 0 / 0
28.10.2011, 08:56:04
    #37501945
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC3 и многопоточность выполняемого кода
МСУВ разрезе GET/POST-запроса клиента.
...
Рейтинг: 0 / 0
28.10.2011, 09:43:42
    #37502001
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC3 и многопоточность выполняемого кода
Не понимаю зачем нужна многопоточность в аспнет. Ведь страница формируется один раз и при её формировании уже все данные должны быть в наличии и разложены по полочкам.
...
Рейтинг: 0 / 0
28.10.2011, 11:05:55
    #37502152
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC3 и многопоточность выполняемого кода
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
...
Рейтинг: 0 / 0
28.10.2011, 11:17:15
    #37502176
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC3 и многопоточность выполняемого кода
МСУ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
Аякс и хендлеры - это понятно. А при формировании страницы это зачем?
...
Рейтинг: 0 / 0
28.10.2011, 11:38:01
    #37502227
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC3 и многопоточность выполняемого кода
ShSergeАякс и хендлеры - это понятно. А при формировании страницы это зачем?
ThreadPool.QueueUserWorkItem, ManualResetEvent, WaitCallback. Причём тут "аякс и хендлеры"? Еще раз прочитайте вторую ссылку.
...
Рейтинг: 0 / 0
28.10.2011, 19:21:10
    #37503358
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC3 и многопоточность выполняемого кода
МСУ,

Alik Levin - прикольно, особенно, если учесть, что написана явная глупость, хотя умные мысли тоже имеются, но, как обычно для левитов, очень редко и фильтровать нужно.
...
Рейтинг: 0 / 0
28.10.2011, 20:31:31
    #37503426
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC3 и многопоточность выполняемого кода
ShSergeнаписана явная глупость
Не понял. Какая глупость?
...
Рейтинг: 0 / 0
28.10.2011, 21:29:25
    #37503470
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC3 и многопоточность выполняемого кода
МСУ,

Давайте не так. Давайте Вы, мне дураку, объясните зачем нужна многопоточность. Левиты здесь - точно не авторитеты. Да, я это использовал в десктопных приложениях. Обычно, было связано с отрисовкой. Объясните зачем это в вэбе?
Ну, я не со зла. Просто, давайте разберёмся на примерчике.
...
Рейтинг: 0 / 0
28.10.2011, 22:15:48
    #37503510
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC3 и многопоточность выполняемого кода
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?

Перевод трэбэ?
...
Рейтинг: 0 / 0
29.10.2011, 13:47:48
    #37503846
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC3 и многопоточность выполняемого кода
МСУ,

Нет, не надо переводить. Вот там же написано, что нужен результат всех трёх запросов, которые друг от друга не зависят. Может быть какая-то выгода в этом и есть, но в том и только в том случае, если запросы - очень тяжёлые и ничего или почти нечего не возвращают, но даже в этом случае, насчёт Max(Q1, Q2, Q3) - это вряд-ли. Даже если допустить, что все три запроса будут исполняться каждый на своём процессоре, впрочем, там об этом написано. А в общем случае - имхо, только тормозить будет и ничего хорошего не получится, только программисту дополнительный гемор.
Короче, на месте топикстартера, я бы этим не занимался бы. Гораздо эффективнее - оптимизация самих запросов.

А в первой ссылочке - я согласен. Но там совсем не та многопоточность, как раз она совсем вопросов не вызывает и вполне законно используется всеми. Некоторые даже об этом не подозревают, например когда грузят ресурсы контрольев.
...
Рейтинг: 0 / 0
29.10.2011, 15:16:45
    #37503897
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC3 и многопоточность выполняемого кода
ShSergeМожет быть какая-то выгода в этом и есть, но в том и только в том случае, если запросы - очень тяжёлые и ничего или почти нечего не возвращают
Ну вот, Вы сами ответили на свой вопрос. И не "может какая-то выгода", а абсолютная выгода для длительных операций (не обязательно с БД).
ShSergeно даже в этом случае, насчёт Max(Q1, Q2, Q3) - это вряд-ли.
Не понял, эт Вы о чем?
ShSergeА в общем случае - имхо, только тормозить будет и ничего хорошего не получится, только программисту дополнительный гемор.

На основе каких умозаключений сделано предположение о тормозах?
Еще раз - есть долговыполняющаяся операция. Зачем клиенту ждать ее окочания? По окончанию операции можно увемомить клиента (реализуется через ajax + timer), а можно не уведомлять.
ShSergeКороче, на месте топикстартера, я бы этим не занимался бы. Гораздо эффективнее - оптимизация самих запросов.

Во-первых, запросы могут быть и так уже оптимизированы. Во-вторых, долговыполняющаяся операция может быть связана не только с БД.
...
Рейтинг: 0 / 0
29.10.2011, 17:39:30
    #37503956
Pilot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC3 и многопоточность выполняемого кода
ShSergeКороче, на месте топикстартера, я бы этим не занимался бы. Гораздо эффективнее - оптимизация самих запросов.

Разговор сильно ушел в сторону :)
Топикстартер НЕ занимается вопросом увеличения быстродействия с помощью параллельного выполнения кода.
Я хочу понять, как происходит инициализация контроллеров. Как singleton или на каждый http-запрос новая копия?
Если первое, то не нужно ли мне заботится о том, чтобы мой код не вызывал коллизий и дэдлоков при исполнении сразу несколькими потоками IIS'а? (по одному потоку на каждый http-запрос)
...
Рейтинг: 0 / 0
29.10.2011, 18:32:18
    #37503977
Парамон
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC3 и многопоточность выполняемого кода
Pilot,

Уже вроде написали, копия на каждый запрос, после отработки копия уничтожается, и нужно следить за нормальным закрытием соединения с базой, так как пул у вас не бесконечный.
Зачем открывать соединение в конструкторе?
А если в экшоне не потребуется подключение к базе, к примеру запрос валидацию не пройдет, на кой вы соединение открыли?
Бест практис это c DAL работать.
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / ASP.NET MVC3 и многопоточность выполняемого кода / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]