С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
0 / 0 / 0
Регистрация: 07.09.2013
Сообщений: 19

Выполнение длительных вычислений и операций в отдельном потоке

24.01.2014, 20:21. Показов 3539. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер.

Возникла проблема с вычислениями. Из базы данных (файл) читаются числа и выполняются с ними операции.. математические...
Когда из файла-базы читал массивы чисел до 10тыс. все было относительно нормально кроме скорости.. , когда пробовал брать больше - программа (консоль) просто виснет или сама закрывается...

Ничего умнее как разбить процесс на потоки не придумал. (может что то логичнее есть?)
Вопрос, в том как организовать потоки по типу:

C#
1
2
3
4
for (int s = 0; s <= l_count1; s++)
{
      //-- тут вызов потока
}
что бы в итоге каждый последующий поток ждал окончания предыдущего, т.к. важна последовательность записи результатов вычислений.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.01.2014, 20:21
Ответы с готовыми решениями:

Выполнение метода в отдельном потоке без await/async
В десктопном WPF проекте с .Net 4.0 необходимо сделать так: private void updateNowButton_Click(object sender, RoutedEventArgs e) ...

ProgressBar в отдельном потоке
Кинул на форму бутонку прогрессБар и тот элемент с не выговариваемым названием для осуществления операций в отдельном потоке, по задумке...

Запустить метод в отдельном потоке
всем привет!) как запустить данный код в отдельном потоке, чтобы не зависала форма? ManagementObjectSearcher searcher = new...

9
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
25.01.2014, 02:21
Может это поможет? BeginInvoke - EndInvoke
http://msdn.microsoft.com/ru-r... -snippet-1
0
Эксперт .NET
 Аватар для Wolfdp
3789 / 1766 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
25.01.2014, 04:29
Цитата Сообщение от Numlocked Посмотреть сообщение
когда пробовал брать больше - программа (консоль) просто виснет или сама закрывается...
Вы случайно не грузите все ваши 10 тыс. в память?
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
25.01.2014, 07:50
Цитата Сообщение от Numlocked Посмотреть сообщение
что бы в итоге каждый последующий поток ждал окончания предыдущего, т.к. важна последовательность записи результатов вычислений.
в чем тогда смысл использования потоков?
0
0 / 0 / 0
Регистрация: 07.09.2013
Сообщений: 19
25.01.2014, 12:27  [ТС]
Цитата Сообщение от Wolfdp Посмотреть сообщение
Вы случайно не грузите все ваши 10 тыс. в память?
а куда их грузить еще?
какие варианты?

Добавлено через 47 секунд
Цитата Сообщение от pycture Посмотреть сообщение
в чем тогда смысл использования потоков?
в скорости..
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
25.01.2014, 12:32
Чтобы дождаться окончания предыдущего потока перед запуском следующего, попробуйте применить классы Lock, Mutex или Monitor.
0
Эксперт .NET
 Аватар для Wolfdp
3789 / 1766 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
25.01.2014, 18:21
Цитата Сообщение от Numlocked Посмотреть сообщение
а куда их грузить еще?
какие варианты?
Я не знаю что у вас за задача, но как вариант считать блок, обработать, считать следующий. Вы же не будете при шифровании видеофайла в 20 ГБ загружать его в память.

Цитата Сообщение от Numlocked Посмотреть сообщение
в скорости..
Процессор один, разбитие на 100 потоков проблемы не решит, а добавит. Тем более вы ещё их хотите выполнять поочередно.

Это всё равно что нанять двух работников для уборки территории и выдать одну метлу.
0
0 / 0 / 0
Регистрация: 07.09.2013
Сообщений: 19
25.01.2014, 21:55  [ТС]
Wolfdp

задача примерно такая же. файл читается по частям, и именно часть в N тыс символов загружается в память.. пытаюсь по частям сжимать файл путем энтропии...
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
25.01.2014, 22:51
Думаю, у Вас 2 варианта (в зависимости от задачи). Если окончательный результат получается путем последовательного вычисления, то потоки не спасут.
А вот если окончательный результат состоит, скажем так, из N предварительных результатов, которые можно рассчитывать независимо от остальных, то тут распараллеливание поможет. Разбить задачу на несколько подзадач, не зависящих друг от друга, их по потокам, и потом на основе результатов этих подзадач высчитывать результат.
Немного нескладно получилось, не силен в объяснениях...
0
 Аватар для ksk
624 / 495 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
26.01.2014, 10:02
Если вы применяете последовательное выполнение потоков, то для того, чтобы дождаться окончания предыдущего потока перед запуском следующего, попробуйте применить thr.Join(), где thr = это ваш объект типа ThreadStart.

И надо разобраться, отчего падает.
Причина либо в реализации вычислений, либо в многопоточном доступе (Join от этого опмогает), либо память превысила 2 гБ на x86.

В параллельных вычислениях я использую Parallel.Foreach, он ставит потоки в очередь и запускает их по мере освобождения ресурсов, занятых обработкой ранее запущенных вычислений.
Например, в этом месте я хотел сделать так, чтобы вычислениями было занято не больше четырёх процессоров:

C#
1
2
3
4
5
6
#if DEBUG
            foreach (Analyser a in Analysers) CalcA(a);
#else
            Parallel.ForEach(Analysers,
            new ParallelOptions { MaxDegreeOfParallelism = 4 }, a => { CalcA(a); });
#endif
Добавлено через 48 минут
В догонку - пример запкска потока с одиданием окончания
C#
1
2
3
4
Thread thr = new Thread(new ThreadStart(workingMethod));
thr.IsBackground = true;
thr.Start();
thr.Join();
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.01.2014, 10:02
Помогаю со студенческими работами здесь

Очередь сообщений в отдельном потоке
В продолжение темы https://www.cyberforum.ru/csharp-net/thread811472.html Мне нужно работать с устройством COM-USB на низком уровне...

Использование WebClient в отдельном потоке
private void button2_Click(object sender, RoutedEventArgs e) { down(); MessageBox.Show(&quot;a&quot;); ...

Выполнить код в отдельном потоке
Доброго времени суток уважаемые! Помогите пожалуйста разобраться с основами многопоточности. Предположим у нас есть класс, class1(); ,...

Таймер не запускается в отдельном потоке
У меня есть поток, в котором в при определенных условиях должен запустится таймер, но он почему то не запускается. Вот упрощенный...

отрисовка графики в отдельном потоке
Привет! Я пишу тетрис на C# с использованием встроенной в .NET графики. В основном потоке - управляющие кнопки, типа менюшка, пауза,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
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-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru