|
7 / 7 / 1
Регистрация: 02.03.2011
Сообщений: 310
|
|
Можно ли использовать несколько потоков для обработки файла23.06.2012, 19:45. Показов 7718. Ответов 7
Метки нет (Все метки)
Доброго времени суток.
У меня такая вот ситуация, есть код который читает данные из txt файлы и выполняется. Это занимает очень много времени и грузит систему всего на 12%. Есть вариант, разделить все на 8 частей и одновременно запустить 8 программ. Прочитал про многопоточность и подумал вместо того чтоб 8 раз код запускать сделать 8 потоков, но так как в программировании я не профи. Есть пара вопросов. 1. Загрузит ли это систему на все 100%? 2. Если я обьявляю все переменные глобально, до создания потоков, при расчетах получается одна переменная существует в 8 потоках, я немного не понимаю, в каждом потоке она будет иметь свое значение? Значения путаться не будут?
0
|
|
| 23.06.2012, 19:45 | |
|
Ответы с готовыми решениями:
7
Как можно парсить ссылки в несколько потоков? Можно ли использовать команду TASKILL для потоков? Программа для обработки аудио/видео, где можно одновременно выделить несколько фрагментов |
|
29 / 31 / 2
Регистрация: 14.04.2012
Сообщений: 152
|
|
| 23.06.2012, 20:21 | |
|
выложи код пожалуйста
0
|
|
|
1245 / 1055 / 293
Регистрация: 07.03.2012
Сообщений: 3,246
|
|
| 23.06.2012, 20:52 | |
|
вам синхронизировать нужно потоки, чтобы они не путались там с переменными вашими. Систему это на 100% загрузить не сможет никак)
0
|
|
|
7 / 7 / 1
Регистрация: 02.03.2011
Сообщений: 310
|
|
| 23.06.2012, 22:01 [ТС] | |
|
Код очень большой, тысячи строк, много вычислений. Нет смысла выкладывать.
Во время работы синхронизировать уже нечего будет. Между потоками ничего общего быть не может. В каждом потоке свои данные, и читать они txt файлы поразному будут. Я просто думал, что можно в самом начале создать потоки, а далее чтоб этот код выполнялся в нескольких разных потоках не зависимо друг от друга. Просто не знаю идти в этом направлении или нет, по идее можно просто параллельно 8 раз код запустить (пробовал, работает отлично, проц на 98% работает, память на 50%, скорость не падает), но хочется чтоб все было по человечески, да и исправления тогда удобней будет вносить.
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|||||
| 23.06.2012, 23:32 | |||||
|
Единственная проблема, которая может возникнуть при работе с потоками - это общие ресурсы. То есть одни и те же объекты, которые используются и (главное!) изменяются в разных потоках. Если имеется такой сценарий, то необходима синхронизация. Если такой ситуации нет, то переживать вам не о чем - потоки между собой пересекаться не будут, потому любые излишние нагрузки на проц и память - это уже вопрос эффективности конкретного алгоритма.
0
|
|||||
|
7 / 7 / 1
Регистрация: 02.03.2011
Сообщений: 310
|
|||
| 24.06.2012, 00:57 [ТС] | |||
|
Добавлено через 4 минуты Добавлено через 1 минуту Если нужен код, я подумаю тогда как сократить его до минимума и задам вопрос, как разделить его на потоки. Спасибо.
0
|
|||
| 24.06.2012, 01:11 | |||
|
тогда по двум вопросам еще раз.
приведу тебе пример потока. ты пришел в супермаркт со списком, взял тележку и начинаешь выполнять алгоритм: 0. выбрать первое незачеркнутое из списка и зачеркнуть. 1. пойти найти на полках. если нашел - положить в тележку. 2. гоуту 0. это - однопоточный режим, поток - это ты, единолично выполняющий алгоритм и безраздельно пользующийся ресурсами (список, карандаш, тележка). а теперь - многопоточность. список прикреплен к тележке, и вас, пришедших за покупками - несколько, и вы друг с другом не общаетесь. ты пришел, прочитал "водка", пошел искать. твой кореш подошел одновременно с тобой, тоже прочитал "водка" и тоже вычеркнул и пошел искать... требуется синхронизация. например, имеется один карандаш, и только имея в руке карандаш, можно получить доступ к списку. тогда алгоритм будет следующий: -1. взять карандаш (синхронизационный объект). если занят - дождаться пока освободится. 0. выбрать первое незачеркнутое из списка и зачеркнуть. 0.5. освободить карандаш. 1. пойти найти на полках. если нашел - положить в тележку. 2. гоуту -1. потоки - это ты и твои кореша в данном примере. но, заметь, ничто не "принадлежит потокам": ни карандаш, ни список, ни тележка. так и с твоей глобальной переменной.
0
|
|||
|
7 / 7 / 1
Регистрация: 02.03.2011
Сообщений: 310
|
|||
| 24.06.2012, 12:40 [ТС] | |||
|
Если сравнивать с супермаркетом, то есть типа как общие txt файлы - супермаркет (типа как IKEA, один такой длинный извилистый коридор, где чтоб дойти до кассы надо пройти весь магазин по порядку), а потоки люди, которые все выполняют один и тот же код. Но у каждого свой кошелек, тележка, список и т.п. Но тележка, кошелек, список и т.п. (а в моем случае еще сотня всяких вещей) это глобальные переменные, только в каждом конкретном случае они заполняются по разному, в каждой тележке лежит разный товар, в каждом кошельке разные суммы денег... И время которое затратит каждый человек в магазине разное. Общее только то, что они все одновремеено в супермаркет вошли. Далее между ними ничего общего нет, кто то быстро все пройдет, кто то медленно. В конце просто каждый пройдет через кассу и пробъет чек (сохранит свой результат в своем txt файле). Так вот, сейчас у меня получается, что в одном супермаркете одновременно ходит один человек, или же второй вариант, я строю несколько супермаркетов и в каждом ходит один человек. Конкретно в моем случае строительство еще 7 супермаркетов увеличивает производительность в 8 раз и соответственно загрузку компа до 100%, при этом скорость не снижается. Но я склоняюсь к мнению, что это не правильное решение проблемы. И есть другой выход. Но так как я не профи в этом, я спрашиваю ВАС, тех кто во всем этом спец, как мне поступить.
0
|
|||
| 24.06.2012, 12:40 | |
|
Помогаю со студенческими работами здесь
8
Создание потоков для обработки файлов Можно ли использовать несколько ELSE IF? запись и выгрузка строк из файла без потерь в несколько потоков Как можно использовать несколько форм? Сервер с использованием пула потоков для параллельной обработки запросов клиентов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
|
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 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|