|
9 / 8 / 5
Регистрация: 13.05.2015
Сообщений: 253
|
||||||||||||||||
Один цикл в нескольких потоках12.11.2022, 17:28. Показов 454. Ответов 8
Метки нет (Все метки)
Здравствуйте. Помогите, пожалуйста, решить такую вот задачу. У меня есть алгоритм, в котором цикл перебирает строки файла:
Как можно сделать так, чтобы одновременно выполнялись операции над 10 и более строками? А лучше по 100 их брать. Просто циклом вытаскивать по сотне строк? Распихивать их по разным переменным? Мне кажется, что это бред. Может можно как-то сделать это в 100 потоков? Добавлено через 19 минут
0
|
||||||||||||||||
| 12.11.2022, 17:28 | |
|
Ответы с готовыми решениями:
8
Недопустимая операция в нескольких потоках |
|
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
|
|
| 12.11.2022, 17:37 | |
|
Делайте асинхронный цикл, тут множество вариаций.
1. Читать из файла построчно (параллельно все равно читать не получится), запускать таску и не дожидаться ее. 2. Сначала прочитать все из файла в память, и пробежаться по этому добру через Parallel.Foreach. 3. Читать блоками по N=100, и каждый блок поток пропускать через Parallel.Foreach. Ну либо через ручное создание таски. И дожидаться всей пачки.
1
|
|
|
9 / 8 / 5
Регистрация: 13.05.2015
Сообщений: 253
|
||
| 12.11.2022, 17:40 [ТС] | ||
|
0
|
||
|
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
|
||||||||||||
| 12.11.2022, 17:59 | ||||||||||||
|
Примерно так:
Добавлено через 6 минут
Лучше код, который выполняется асинхронно выделить в отдельный метод, а не в виде лямбы, как выше, так будет более структурированно. Тогда будет две ссылки на этот метод, в Parallel.Foreach и в условии batch.Any. Добавлено через 1 минуту Вы можете параметр N (размер batch-а) вынести в конфигурацию и поиграться с ним, проводя мониторинг занимаемой памяти и скорости обработки. Добавлено через 2 минуты Можно еще использовать PLINQ, это почти тоже самое что Parallel.Foreach, только вроде как PLINQ не жалеет ресурсы процессора, начинает кушать все. Ну у вас там все равно I/O, так что без разницы.
1
|
||||||||||||
|
9 / 8 / 5
Регистрация: 13.05.2015
Сообщений: 253
|
|||
| 12.11.2022, 18:04 [ТС] | |||
|
А далее: "System.Net.WebException: "Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера." И следом: "System.AggregateException: "One or more errors occurred" Добавлено через 3 минуты
0
|
|||
|
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
|
||
| 12.11.2022, 18:04 | ||
|
Пишите в память, а не в файл, либо запись в файл делайте взаимоисключащим (с контрукцией lock, например).
1
|
||
|
9 / 8 / 5
Регистрация: 13.05.2015
Сообщений: 253
|
|||
| 12.11.2022, 18:07 [ТС] | |||
|
Добавлено через 1 минуту
0
|
|||
|
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
|
||||||||
| 12.11.2022, 18:24 | ||||||||
|
Добавлено через 3 минуты Но пусть будет по-вашему:
Добавлено через 11 минут Mr_Asdshka, а можно ничего не лочить, а писать в свой временный файл с рандомным именем. После завершения всей обработки просто слить все файлы в один. Но тут будет больше I/O нагрузки на диск, но зато скорость обработки подрастет, так как локов нету. Добавлено через 34 секунды Как видите компромиссов много разных.
1
|
||||||||
|
9 / 8 / 5
Регистрация: 13.05.2015
Сообщений: 253
|
|||||||
| 13.11.2022, 08:01 [ТС] | |||||||
0
|
|||||||
| 13.11.2022, 08:01 | |
|
Помогаю со студенческими работами здесь
9
Недопустимая операция в нескольких потоках
Недопустимая операция в нескольких потоках. Управление соединением с БД в нескольких потоках Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|