Отправка кусков работы фоновым работникам - PullRequest
0 голосов
/ 15 ноября 2018

Использование C #.

У меня есть 100 000+ фрагментов тестовых данных, с которыми необходимо выполнить некоторые вычисления.Мой фактический набор данных будет в миллионах частей данных.В настоящее время тестовые данные выполняются последовательно и для их обработки требуется около минуты.Я хочу разделить эту работу и сделать так, чтобы фоновые работники работали вплотную, поэтому я надеюсь, что обработка будет выполняться быстрее.

Я имею в виду, что нужно выполнить цикл foreach с данными и запускать фонового работника с каждымчасть данных.Я знаю, что мне нужно ограничить число bw до трех, так как у меня 4 ядра на этой машине.Я провел некоторое тестирование с простыми бв, но не с тремя одновременно.

Я понятия не имею, как это сделать.Как выполнить трех фоновых работников для обработки этих данных?

1 Ответ

0 голосов
/ 15 ноября 2018

BackgroundWorker предназначен в основном для раннего обучения. Возможно странный альтернативный сценарий многопоточности. То, что вы делаете, звучит как очень продвинутая работа. Вы все еще можете использовать BGW, но на этом этапе лучше использовать необработанные потоки, задачи, потоки и т. П.

Существует также общий вопрос, можно ли даже ускорить эту операцию с помощью многопоточности. Мне нравится говорить, что «многопоточность должна тщательно выбирать проблемы». Выберите его в неправильном сценарии, и вы получите программу, которая требует больше памяти, более подвержена ошибкам и медленнее , чем отдельная BGW или последовательная программа.

Ваш случай может быть одним из редких случаев приятной операции . Или это может быть связано с памятью. Это означает, что вы почти мгновенно сталкиваетесь с замедлением Паралеля . Сопротивляйтесь попыткам при жестком кодировании количества потоков. Обычно вы можете оставить эту работу по балансировке нагрузки ThreadPool. Чтобы получить лучший ответ, вам нужно быть более конкретным.

...