|
64 / 63 / 43
Регистрация: 01.05.2012
Сообщений: 535
|
|
.NET 4.x И снова многопоточность01.06.2014, 02:13. Показов 2788. Ответов 36
Метки нет (Все метки)
Доброй ночи всем!
Я уже понял, что это ооочень заезженная тема "многопоточность") Полностью просмотрел урок (2 часа) http://www.youtube.com/watch?v=strsTAfcAv4 Основы-то понял, но как именно реализовать мою задачу пока не совсем понимаю... А задача в следующем: Имеется какой-то длинный массив строк. Ну и используем к примеру 10 потоков. Должно происходить что-то следующее: 1-й поток берёт себе 1-ю строку массива, 2-й вторую и так далее. НО время выполнения может быть разное, и если первые 9 потоков ещё выполняют задачу, а 10-й поток уже выполнил мвою 10-ю строку, то он должен брать следующую строку массива (11-ю). И так соответственно все остальные. (Не блещу умением объяснять)) Короче: что бы когда поток выполняет какое-то действие с элементом массива, он должен брать следующий первый попавшийся. Сложность с тем, что бы 2 потока не взяли один и тот же элемент... Весь день читаю статьи и не могу точно найти ответ на поставленную задачу. И при помощи чего делать.. Почему-то кажется что подойдёт пул потоков.. Или может через Parallel.For? Скорее всего буду делать WidowsForms, поэтому может быть использовать BackgroundWorker?.. В общем подскажите пожалуйста... Уже очень долго мучаюсь.. P.S. Заранее отвечу на вопрос, программа ProxyChecker.. Просто встала задача под определённый сайт. Саму проверку прокси уже реализовал, вот теперь мучаюсь, что бы ускорить сее творение.
0
|
|
| 01.06.2014, 02:13 | |
|
Ответы с готовыми решениями:
36
И снова про многопоточность Снова многопоточность: совместный доступ к объекту Снова хром, снова сапопроизвольно открывается, снова bkrfdf.xyz и казино |
|
Master of Orion
|
|
| 01.06.2014, 12:49 | |
|
awp-sirius,
0
|
|
|
169 / 132 / 29
Регистрация: 16.02.2013
Сообщений: 867
|
|
| 01.06.2014, 13:39 | |
|
Psilon, а почему бы не использовать lock и очередь к примеру?
0
|
|
|
447 / 305 / 47
Регистрация: 23.01.2013
Сообщений: 661
|
|
| 01.06.2014, 13:44 | |
|
Ну лок здесь с очередью точно не нужен. Хватит одного инта и Interlocked.Increment.
1
|
|
|
Master of Orion
|
|
| 01.06.2014, 13:58 | |
|
тем более, что тредпул был разработан специально для решения таких задач. Глупо было бы после этого его не использовать
Добавлено через 12 секунд Anklav, да Добавлено через 6 минут Anklav, кстати у меня был тест помню, так lock с обычным i++ был быстрее, чем interlocked. Так что с точки зрения производительности lock выигрывает о_0 Добавлено через 7 минут хотя не всегда. Зависит от числа потоков
0
|
|
|
64 / 63 / 43
Регистрация: 01.05.2012
Сообщений: 535
|
||||||
| 01.06.2014, 15:10 [ТС] | ||||||
|
Psilon, Спасибо, а можно какой-нибудь пример использования Thread Pool или Parallel.For именно для похожей задачи?
Winhttp22, сначала и пытался использовать lock: Кликните здесь для просмотра всего текста
Однако переменные в потоках получаются "разные", что бы один поток не делал с i, у второго потока значение для его переменно i не изменится.
0
|
||||||
|
64 / 63 / 43
Регистрация: 01.05.2012
Сообщений: 535
|
||||||
| 01.06.2014, 15:34 [ТС] | ||||||
|
Пробую использовать Parallel.For:
Кликните здесь для просмотра всего текста
Получается следующее: Как я понимаю у меня создалось 50 потоков... Как это количество ограничить?... К примеру цикл не до 50-ти, а до 10000, и я хочу, что бы выделялось 20 потоков, они выполнялись, как только поток освобождается выполняет следующую задачу
0
|
||||||
|
169 / 132 / 29
Регистрация: 16.02.2013
Сообщений: 867
|
||||||||||||
| 01.06.2014, 15:50 | ||||||||||||
![]()
Кликните здесь для просмотра всего текста
0
|
||||||||||||
|
Master of Orion
|
||||||
| 01.06.2014, 16:45 | ||||||
|
Winhttp22, никогда, никогда, никогда не работай с потоками вручную, самый низкоуровневый интерфейс для многопоточности - пул.
awp-sirius, пожалуйста, пример с пулом:
0
|
||||||
|
447 / 305 / 47
Регистрация: 23.01.2013
Сообщений: 661
|
|
| 01.06.2014, 16:47 | |
|
Psilon, при использовании лока плохо будет когда контекст переключится, а старый поток останется внутри лока, тогда остальные потоки будут сосать лапу. С неблокирующими операциями такого не случится.
1
|
|
|
64 / 63 / 43
Регистрация: 01.05.2012
Сообщений: 535
|
|
| 01.06.2014, 17:08 [ТС] | |
|
Psilon, Если честно... Не совсем понял...
Как использовать Parallel.For именно для похожей задачи? Ну что бы ограничить количество потоков Добавлено через 2 минуты Меня устраивает результат, который получался вот с печатью цифр от 0 до 99, пусть не по порядку, но повторений нет и ничего не выскакивает. Просто увеличение числа потоков != увеличение производительности.
0
|
|
|
169 / 132 / 29
Регистрация: 16.02.2013
Сообщений: 867
|
|
| 01.06.2014, 17:11 | |
|
0
|
|
|
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
|
||
| 01.06.2014, 17:15 | ||
|
делаешь Х потоков, в каждом лочишь очередь, достаешь 1 элемент и обрабатываешь
0
|
||
|
64 / 63 / 43
Регистрация: 01.05.2012
Сообщений: 535
|
|
| 01.06.2014, 17:18 [ТС] | |
|
m0nax, значит приблизительно то, что предложил Winhttp22?
0
|
|
|
169 / 132 / 29
Регистрация: 16.02.2013
Сообщений: 867
|
|||
| 01.06.2014, 17:27 | |||
|
Добавлено через 5 минут
0
|
|||
|
64 / 63 / 43
Регистрация: 01.05.2012
Сообщений: 535
|
|
| 01.06.2014, 17:35 [ТС] | |
|
Winhttp22, порядок не важен..
в общем нужно использовать ThreadPool, а не Parallel.For?
0
|
|
|
Master of Orion
|
||||||||
| 01.06.2014, 18:39 | ||||||||
|
awp-sirius, уж определись, что тебе хочется. Параллельный вывод чисел от 1 до 99? Пожалуйста:
Добавлено через 2 минуты
0
|
||||||||
|
64 / 63 / 43
Регистрация: 01.05.2012
Сообщений: 535
|
|||
| 01.06.2014, 19:34 [ТС] | |||
|
Вот можно в ручную: ThreadPool.SetMaxThreads(int workerThreads, int completionPortThreads), но что такое int completionPortThreads? На msdn написано, но как-то не понятно.. То есть будет массив из скольких-то элементов. Каждый поток должен брать один элемент (ip proxy) и проверять его. Это занимает время (ожидание отклика). Вся проблема в том, что бы 2 потока не взяли один и тот же элемент массива.
0
|
|||
| 01.06.2014, 19:34 | |
|
Помогаю со студенческими работами здесь
20
Как сделать чтобы таймер дойдя до 0 стартовал снова и снова? HP 625 снова и снова перезагружается в безопасный не заходит Снова поток. Снова синхронизация и снова .htaccess и снова rewriterule
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536
Одним из. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|