|
1 / 1 / 0
Регистрация: 10.08.2012
Сообщений: 60
|
|||||||||||
Параллельный поток с параметром. Как ускорить работу08.05.2024, 11:50. Показов 1047. Ответов 14
Здравствуйте.
Я подсчитываю факториал и для ускорения разбиваю число на две части и выполняю умножения в двух параллельных потоках. Проблема однако в том, что когда я вычисляю факториал без потока у меня на это уходит менее 2-х минут, а когда использую параллельный поток, то время увеличивается почти до 11 минут. Вопрос, как ускорить подсчёт? Код большой. Для обрисовки ситуации приведу аналогичные два кода (с потоками и без), чтобы была видна проблема. Код1 (без потока). Условно на его выполнение уходит 2 минуты.
Тут есть ещё один казус. Если в первом коде я всего лишь подключаю один раз (не в цикле) параллельный поток, который ничего не выполняет, то код выполняется быстрее.
0
|
|||||||||||
| 08.05.2024, 11:50 | |
|
Ответы с готовыми решениями:
14
параллельный поток Как ускорить работу IJ? Как ускорить работу? |
|
Неадекват
1499 / 1236 / 247
Регистрация: 02.04.2010
Сообщений: 2,807
|
|
| 08.05.2024, 12:06 | |
|
Итерационные алгоритмы где вычисление следующего значения зависит от предыдущего - крайне плохо параллелятся, ибо затраты на синхронизацию между потоками превысят прирост от разделения по потокам.
В вашем случае можно разбить пространство перемножаемых чисел на части, каждую часть перемножить в отдельном потоке - результаты сохранить в коллекцию (не забывая про синхронизацию) и потом перемножить элементы в коллекции. Но это во первых будет жрать уйму памяти и скорее всего будет медленнее, чем перемножать в одном потоке.
0
|
|
|
1 / 1 / 0
Регистрация: 10.08.2012
Сообщений: 60
|
||||||||||||
| 08.05.2024, 12:23 [ТС] | ||||||||||||
|
Добавлено через 3 минуты Код 3. Работает условные 9 минут
Код 4. Интересный казус - работает быстрее, чем три предыдущих:
0
|
||||||||||||
|
176 / 74 / 27
Регистрация: 10.11.2023
Сообщений: 199
|
||||||||
| 08.05.2024, 13:05 | ||||||||
|
тема названа параллельный поток
но создаете 10 потоков так понятнее ?
0
|
||||||||
|
|
|||||||
| 08.05.2024, 14:53 | |||||||
|
1. стартуется один и тот же треад 2. нет ожидания 3. нет синхронизации (для подсчета факториала такой подход вообще не рабочий в плане ускорения, но в вашем случае запишется что угодно, но не результат) "Правильное" решение 1. дробим число на блоки 2. запускает расчет частичного произведения в отдельном блоке 3. по завершению всех высчитываем произведения результатов всех потоков Профит начинается с очень больших чисел. Считать факторил от 10 в многопотоке бессмысленно.
2
|
|||||||
|
1 / 1 / 0
Регистрация: 10.08.2012
Сообщений: 60
|
|||||||||
| 08.05.2024, 23:31 [ТС] | |||||||||
|
Добавлено через 1 минуту Добавлено через 15 минут
В цикле я делю число на две части, которые умножаю на i. Одна часть умножается в основном потоке, вторая в параллельном.
0
|
|||||||||
|
|
||
| 08.05.2024, 23:45 | ||
![]() Поток может ожидать поступления данных в потокобезопасную очередь и возобновлять работу при их получении. Добавлено через 1 минуту Многопоточность (очередь потоков на обслуживание)
0
|
||
|
1 / 1 / 0
Регистрация: 10.08.2012
Сообщений: 60
|
|||
| 08.05.2024, 23:56 [ТС] | |||
|
Добавлено через 8 минут
0
|
|||
|
|
|||
| 08.05.2024, 23:59 | |||
|
Ещё всегда можно вбить "окей гугл, что такое BigInteger в C#"
0
|
|||
|
|
||||||||||||
| 09.05.2024, 10:02 | ||||||||||||
|
Кликните здесь для просмотра всего текста
0
|
||||||||||||
|
|
||
| 09.05.2024, 17:02 | ||
|
И строго говоря, я бы ТСу советовал начать с более простых примеров многопоточности.
1
|
||
|
|
|
| 09.05.2024, 17:17 | |
|
Не повиснет, цикл прокрутится и заберёт.
Добавлено через 2 минуты Начать лучше с Литература по C# для начинающих и не только, Шилдт, главы 23-24.
0
|
|
|
|
||||||||
| 09.05.2024, 18:11 | ||||||||
throw new Exception("unexpected signal"); рекомендую оставлять так как обычно такие велосипеды обрастают доп-логикой, которая нет-нет, да и ломает общую картину. OperationCanceledException тоже стоит чекать что это именно наша отмена, а что-то внутри завалилось (в данном случае выглядит избыточно, но вспоминаем про велосипед и потенциально приделанный к нему ракетный двигатель).Вообще схема рабочая в том плане, что порой нужно обеспечить очередность (скажем у нас транзакции, или какой-то объект имеет состояние, которое нужно контролировать) и таке конструкции вполне практикуются.
1
|
||||||||
|
|
|
| 09.05.2024, 18:57 | |
|
Mutex?
Добавлено через 4 минуты Хотя нет, семафор тут больше подходит.
0
|
|
| 09.05.2024, 18:57 | |
|
Помогаю со студенческими работами здесь
15
Как ускорить работу Параллельный поток glut Как ускорить работу вебсайта Как ускорить работу ADO? Как ускорить работу приложения? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга,
Ты же видел моря и метели.
Как сменялись короны и стяги,
Как эпохи стрелою летели.
- Этот мир — это крылья и горы,
Снег и пламя, любовь и тревоги,
И бескрайние. . .
|