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

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

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

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

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

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

Вопрос:
При обращении к этому приватному полю в теле action'a я работаю с отдельной копией объекта или же она расшарена между потоками, и нужно принимать во внимание многопоточность?
...
Рейтинг: 0 / 0
ASP.NET MVC3 и многопоточность выполняемого кода
    #37501796
Starlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
ASP.NET MVC3 и многопоточность выполняемого кода
    #37501944
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PilotПри обращении к этому приватному полю в теле action'a я работаю с отдельной копией объекта или же она расшарена между потоками, и нужно принимать во внимание многопоточность?
С отдельной копией в разрезе POST-запроса клиента. Более того, можете не утруждать себя этой заморочкой, ASP.NET сам по себе многопоточен, и если ему нужно будет, он в пуле потков создаст еще один поток.
Единственное, где можно нарваться на проблему, это статические (читай глобальные) методы. Если очень нужнат статика, - курим потокобезопасный синглтон. А вообще лучше страраться не использовать статику в бизнесе (простые не зависящие от контекста хелперы и иже не в счет).
...
Рейтинг: 0 / 0
ASP.NET MVC3 и многопоточность выполняемого кода
    #37501945
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУВ разрезе GET/POST-запроса клиента.
...
Рейтинг: 0 / 0
ASP.NET MVC3 и многопоточность выполняемого кода
    #37502001
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не понимаю зачем нужна многопоточность в аспнет. Ведь страница формируется один раз и при её формировании уже все данные должны быть в наличии и разложены по полочкам.
...
Рейтинг: 0 / 0
ASP.NET MVC3 и многопоточность выполняемого кода
    #37502152
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
ASP.NET MVC3 и многопоточность выполняемого кода
    #37502176
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ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
ASP.NET MVC3 и многопоточность выполняемого кода
    #37502227
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShSergeАякс и хендлеры - это понятно. А при формировании страницы это зачем?
ThreadPool.QueueUserWorkItem, ManualResetEvent, WaitCallback. Причём тут "аякс и хендлеры"? Еще раз прочитайте вторую ссылку.
...
Рейтинг: 0 / 0
ASP.NET MVC3 и многопоточность выполняемого кода
    #37503358
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

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

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

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

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

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

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

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

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


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