|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
10.11.2012, 18:17 | #1 |
Пользователь
Регистрация: 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мс. Кроме того, асинхронность перемешивает очередь и не факт, что в переменную попадет самое актуальное значение. Я не спец в программировании, поэтому прошу совета - правильны ли мои выводы? Предполагаю, что при событиях или методах, выполнение которых занимает значительное время, асинхронная обработка необходима, но не во вред ли она, когда обработка события занимает ничтожно мало времени? Заранее благодарен за ответы. |
10.11.2012, 19:24 | #2 |
Форумчанин
Регистрация: 25.09.2009
Сообщений: 525
|
да все верно
очень распространено заблуждение что потоки что-то ускоряют сами по себе.. а на деле они не то что не ускоряют, а наоборот замедляют для мелких задач это как раз замедление, а вот если что-то крупное и долгое растянуть на несколько потоков прирост будет в разы банально те же запросы на сайты - 5 запросов в 5 потоках выполнятся в 5 раз быстрей чем те же запросы в 1 потоке, вот уже х5 прирост скорости |
11.11.2012, 17:47 | #3 |
Форумчанин
Регистрация: 17.12.2008
Сообщений: 250
|
А вы можете все 200 событий обработать в одном отдельном потоке?а для 0.005 мс отдельно пулить смысла нет
|
11.11.2012, 18:56 | #4 |
Пользователь
Регистрация: 26.12.2010
Сообщений: 85
|
Была мысль их в отдельный поток запихать, только смысла не вижу, 200 - это максимум, обычно меньше. Вот если бы их было 2000 или 20000, тогда, скорее всего, без обработки их в отдельном потоке уже было бы не обойтись.
|
11.11.2012, 18:57 | #5 | |
Пользователь
Регистрация: 26.12.2010
Сообщений: 85
|
Цитата:
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Обработка 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 |