Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.11.2012, 18:17   #1
gramp
Пользователь
 
Регистрация: 26.12.2010
Сообщений: 85
По умолчанию Что предпочтительнее - обработка событий асинхронно или в главном потоке?

Сделал замеры стопватчем и оказалось, что обработка события в главном потоке занимает 0,005-0,01мс (в обработке события происходит только присвоение переменным новых значений и без вызова других методов). Предположим, что раз в 100мс приходят 200 событий.
Правильно ли будет утверждать, что обработка событий в главном потоке притормозит этот главный поток приложения на 200событий * 0,01мс = 2мс, и обработка событий будет производиться строго по очереди, без нарушения порядка.
А вот обработка события асинхронно (через Threadpool или Task) позволяет за очень короткое время, почти равное времени обработки в главном потоке, вернуть управление главному потоку, но как раз непосредственно асинхронная обработка не всегда, но регулярно производится на 10мс, а иногда и на 100мс позднее, среднее значение времени обработки - 0,5мс - в 50-100 раз медленнее. Процессор с двумя ядрами. Главный поток садится на одно, на второе уходят потоки асинхронной обработки.
Правильно ли будет утверждать, что при асинхронной обработке суммарное время обработки составит 200событий * 0,5мс = 100мс. Кроме того, асинхронность перемешивает очередь и не факт, что в переменную попадет самое актуальное значение.
Я не спец в программировании, поэтому прошу совета - правильны ли мои выводы?
Предполагаю, что при событиях или методах, выполнение которых занимает значительное время, асинхронная обработка необходима, но не во вред ли она, когда обработка события занимает ничтожно мало времени?
Заранее благодарен за ответы.
gramp вне форума Ответить с цитированием
Старый 10.11.2012, 19:24   #2
m0nax
Форумчанин
 
Аватар для m0nax
 
Регистрация: 25.09.2009
Сообщений: 525
По умолчанию

да все верно
очень распространено заблуждение что потоки что-то ускоряют сами по себе..
а на деле они не то что не ускоряют, а наоборот замедляют

для мелких задач это как раз замедление, а вот если что-то крупное и долгое растянуть на несколько потоков прирост будет в разы
банально те же запросы на сайты - 5 запросов в 5 потоках выполнятся в 5 раз быстрей чем те же запросы в 1 потоке, вот уже х5 прирост скорости
m0nax вне форума Ответить с цитированием
Старый 11.11.2012, 17:47   #3
Reskov
Форумчанин
 
Аватар для Reskov
 
Регистрация: 17.12.2008
Сообщений: 250
По умолчанию

А вы можете все 200 событий обработать в одном отдельном потоке?а для 0.005 мс отдельно пулить смысла нет
Reskov вне форума Ответить с цитированием
Старый 11.11.2012, 18:56   #4
gramp
Пользователь
 
Регистрация: 26.12.2010
Сообщений: 85
По умолчанию

Цитата:
Сообщение от Reskov Посмотреть сообщение
А вы можете все 200 событий обработать в одном отдельном потоке?а для 0.005 мс отдельно пулить смысла нет
Была мысль их в отдельный поток запихать, только смысла не вижу, 200 - это максимум, обычно меньше. Вот если бы их было 2000 или 20000, тогда, скорее всего, без обработки их в отдельном потоке уже было бы не обойтись.
gramp вне форума Ответить с цитированием
Старый 11.11.2012, 18:57   #5
gramp
Пользователь
 
Регистрация: 26.12.2010
Сообщений: 85
По умолчанию

Цитата:
Сообщение от m0nax Посмотреть сообщение
да все верно
очень распространено заблуждение что потоки что-то ускоряют сами по себе..
а на деле они не то что не ускоряют, а наоборот замедляют

для мелких задач это как раз замедление, а вот если что-то крупное и долгое растянуть на несколько потоков прирост будет в разы
банально те же запросы на сайты - 5 запросов в 5 потоках выполнятся в 5 раз быстрей чем те же запросы в 1 потоке, вот уже х5 прирост скорости
Благодарю за совет
gramp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка JS событий Pamparam JavaScript, Ajax 5 15.08.2012 15:33
обработка изображения в потоке Dеlphi Общие вопросы Delphi 8 04.03.2011 22:01
TSaveDialog и иницилизация COM в главном потоке. nik531 Компоненты Delphi 0 05.02.2010 10:38
как вызвать в Dll по указателю функцию, которая определена в главном потоке? SaintRain Общие вопросы Delphi 1 25.11.2006 08:27
как вызвать из Dll функцию, которая определена в главном потоке? SaintRain Win Api 1 23.11.2006 20:08