|
0 / 0 / 0
Регистрация: 27.01.2014
Сообщений: 116
|
|||||||||||
Время многопоточного выполнения функции07.07.2016, 22:26. Показов 1890. Ответов 32
Метки нет (Все метки)
Этот код исполняется за 0.4 сек на моём компьюетере
breakpoint1
Однако время выполнения строк между breakpoint1 и breakpoint2 = около 2 сек. это для меня долго, нужно около 0.5 сек. Мои предположения: что кроме этих потоков планировщик обрабатывает и другие. Поправьте если я неправ и помогите добиться нужной скорости.
0
|
|||||||||||
| 07.07.2016, 22:26 | |
|
Ответы с готовыми решениями:
32
Как ограничить время выполнения функции Прерывание выполнения функции в момент выполнения события Время выполнения функций |
|
|
||
| 07.07.2016, 23:55 | ||
|
И большое количество потоков может не улучшить, а ухудшить ситуацию. Тут уже неоднократно говорилось: поедание памяти каждым из потоков, затраты на переключение контекста и так далее. В идеале количество потоков=количеству ядер процессора компьютера.
0
|
||
|
158 / 187 / 48
Регистрация: 25.11.2013
Сообщений: 978
|
|
| 07.07.2016, 23:57 | |
|
0
|
|
| 08.07.2016, 00:03 | |
|
0
|
|
|
132 / 82 / 29
Регистрация: 01.10.2014
Сообщений: 263
|
|
| 08.07.2016, 00:07 | |
|
DataPlanner, а как правильно, можно ссылку на книгу или статью, ну или своими словами?
0
|
|
|
|
||
| 08.07.2016, 00:14 | ||
![]() О великий гуру многопоточности, пролейте на нас свет своей неистощимой мудрости, снизойдите к нам с небес всезнания!
1
|
||
|
158 / 187 / 48
Регистрация: 25.11.2013
Сообщений: 978
|
||
| 08.07.2016, 00:15 | ||
|
Более того, если следовать вашей логике, тогда любой веб сервер должен обрабатывать кол-во запросов = кол-во процессоров, м?
0
|
||
|
Администратор
|
|||||||
| 08.07.2016, 00:43 | |||||||
|
DataPlanner, попробуй запустить данный код и посмотреть статистику по состоянию потоков.
Результат на моей машине
Большинство потоков будут в состоянии Wait. Это говорит о том что потоков может быть столько угодно, но выполнять система может столько потоков сколько ядер в системе. Отсюда и рекомендация не создавать в рамках одного процесса потоков больше чем в системе ядер.
3
|
|||||||
|
158 / 187 / 48
Регистрация: 25.11.2013
Сообщений: 978
|
|
| 08.07.2016, 00:54 | |
|
Прочитано.
0
|
|
|
0 / 0 / 0
Регистрация: 27.01.2014
Сообщений: 116
|
|
| 08.07.2016, 09:13 [ТС] | |
|
Хорошо, положим, у меня один процессор (одно ядро). Как мне выполнить те 10 потоков за ~ 0.4 сек (в идеале)? Это возможно вообще? мне подсказали Task Parallel Library, что вы скажете?
Вообще реальная задача такая. Я делаю парсер. Ответ от сервера приходит примерно за 200 мс. У меня будет куча url-в (100 или больше), при заходе на сайт все они обработаются парсером, т.е. суммарное время на последовательную обработку у меня уже ~ 20 сек. Как сделать это время не больше 3-х секунд?
0
|
|
|
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
|
||
| 08.07.2016, 09:33 | ||
|
При разработке многопоточного приложения мы не гонимся за конкретной скоростью выполнения задачи. Мы (в общем случае) выделяем в отдельные потоки те задачи, которые вполне могут выполняться независимо друг от друга, чтобы одна не ждала другую. Самый тривиальный пример - отделение потока пользовательского интерфейса от продолжительной задачи, чтобы пока задача решается пользователя не вводить в состояние паники "зависшим" интерфейсом.
0
|
||
|
0 / 0 / 0
Регистрация: 27.01.2014
Сообщений: 116
|
|
| 08.07.2016, 09:41 [ТС] | |
|
Rius, Разве может asp.net приложение работать, пока оно не вызывается пользователем? Если да, то как?
0
|
|
|
Администратор
|
|||
| 08.07.2016, 09:41 | |||
|
0
|
|||
|
0 / 0 / 0
Регистрация: 27.01.2014
Сообщений: 116
|
|
| 08.07.2016, 09:54 [ТС] | |
|
OwenGlendower, парсер уже сделан, использовал CsQuery. Я столкнулся с тормозами (времена ответов от сервера) при парсинге с большого количества источников. Я думал о том же, о чём подсказал Rius, но разве может веб приложение работать автономно, когда не запрашивается пользователем?
0
|
|
|
|
|
| 08.07.2016, 11:34 | |
|
Php + cron может. Здесь тоже обязаны были что-то изобрести аналогичное, слишком уж удобно.
Добавлено через 21 минуту How to run Background Tasks in ASP.NET
0
|
|
|
0 / 0 / 0
Регистрация: 27.01.2014
Сообщений: 116
|
|
| 08.07.2016, 13:45 [ТС] | |
|
Вариант такой: по таймеру на сервере собирать инфо (скажем, каждый час). Сохранять её в БД или как-то кэшировать. По запросу пользователя - отдавать её. И не надо никаких потоков. Норм?
Добавлено через 16 минут Нет похоже так нельзя. Опять придётся заходить на сайт. Как вызвать метод приложения, не заходя на сайт?
0
|
|
|
Администратор
|
|
| 08.07.2016, 13:47 | |
|
olegall, лучше написать отдельное приложение которое будет запускаться по расписанию с помощью Task Scheduler.
0
|
|
|
0 / 0 / 0
Регистрация: 27.01.2014
Сообщений: 116
|
|
| 08.07.2016, 13:53 [ТС] | |
|
OwenGlendower, которое будет запускать основное приложение раз в интервал времени? Если так, то где это отдельное приложение хранить? Непонятно, почему оно должно запускаться. Оно должно работать всегда (например, на домашнем компьютере) и запускать раз в интервал времени основное приложение (как я понимаю)
0
|
|
|
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
|
|
| 08.07.2016, 15:26 | |
|
olegall, как вариант - отдельное приложение в виде службы виндовс, в фоне парсящее эти твои 100 и более урлов. Свяжи его со своим веб-приложением, например, по WCF. Пользователь заходит на твой сайт, контроллер выполняет WCF запрос и выдаёт пользователю нужную инфу.
В итоге получается вполне себе MVC паттерн, где в качестве модели выступает отдельное приложение.
0
|
|
| 08.07.2016, 15:26 | |
|
Помогаю со студенческими работами здесь
20
Время выполнения циклов. Остановка выполнения в указанное время Измерить время выполнения програмы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет
значение производной при заданном х
Логарифм записывается как: (x-2)log(x^2+2) -. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|