-
используя массив под буфер ищи пример многопоточного копирования
-
> [true]TRIx © (18.04.10 06:01)
> используя массив под буфер ищи пример многопоточного копирования
Ищи пример побуферного копирования.
--
Regards, LVT.
-
> ищу пример многопоточного копирования одного файла побайтно
Тебе сколько потоков сделать?
-
> [true]TRIx (18.04.2010 06:01:00) [0]
Хочешь замедлить процесс копирования? Так есть более простые методы, без потоков
-
Удалено модератором
-
Удалено модератором
-
нужны потоки. так как читает в бфер и долго обрабатывает там данные, нужна максимальная загрузка. или это еще дольше будет работать?
-
1 берем кусок
2 обрабатываем кусок, массив (долго)
хотелось бы сравнить скорость в один поток и в несколько.
-
> [true]TRIx © (19.04.10 02:24) [6]
>
> нужны потоки. так как читает в бфер и долго обрабатывает
> там данные
В рамках одного локального компьютера? Имхо бред.
-
Процессор-то всё равно один.
А если несколько, то это требует специального решения.
-
> [7] [true]TRIx © (19.04.10 02:27)
а в чем сложность то? создавай столько потоков, сколько имеется т.н. исполнительных потоков процессора.
-
> [9] Германн © (19.04.10 02:40)
intel core i7 - восемь исполнительных потоков.
-
и восемь дисков, на которые копируется "один файл побайтно"?
> Хочешь замедлить процесс копирования? Так есть более простые методы, без потоков
+1
-
> нужны потоки. так как читает в бфер и долго обрабатывает там данные
Ну так и обрабатывай параллельно.
Причем тут параллельное чтение?
-
как сделать обработку под 2 процессора сразу, с максимальной загрузкой? можно инфу
-
> [true]TRIx © (19.04.10 09:38) [14]
SetThreadAffinityMask
-
> как сделать обработку под 2 процессора сразу
Как создать 2 доп. потока описано в справке, примеры есть в папке Demos.
С другой стороны, мне представляется маловероятным,
что начинающий столкнулся с тяжелой вычислительной задачей.
Интересно было бы узнать, что за задача такая?
-
а многопоточность при чтении разве поможет?
-
Скорость чтения-записи на один поток была как то ограничена искусственно каким-либо факторами (по аналогии со скачиванием файла с сервера через Интернет), то многопоточное чтение-запись помогли бы. А так разницы не будет.
-
> brother © (19.04.10 10:49) [17]
> а многопоточность при чтении разве поможет?
Скорость чтения одного файла в любом случае ограничена возможностями железа. При чтении из нескольких потоков скорость будет замедлена, возникнут дополнительные накладные расходы.
С другой стороны у автора конкретная задача, никак не связанная со скоростью именно копирования.
> [true]TRIx © (19.04.10 02:24) [6]
> нужны потоки. так как читает в бфер и долго обрабатывает
> там данные, нужна максимальная загрузка. или это еще дольше
> будет работать?
Сделаю пример попозже.
-
я так понял у автора данных не так уж и много, затык не скорости записи, а скорости обработки. пусть пояснит?
-
В формулировке автора реализация не так проста, как кажется.
Всё равно добью пример - из принципа.
-
> Демо © (20.04.10 01:55) [21]
>
> В формулировке автора реализация не так проста, как кажется.
>
> Всё равно добью пример - из принципа.
А какая у автора формулировка задачи?
Сможет ли твой, Саша пример, помочь автору?
-
> > > В формулировке автора реализация не так проста, как
> кажется.> > Всё равно добью пример - из принципа.А какая
> у автора формулировка задачи?Сможет ли твой, Саша пример,
> помочь автору?
Автору вряд ли сможет помочь полностью. Но автор хоть увидит, что овчинка выделки не стоит.
А вот мозги тренировать и разминать их иногда полезно-)
Я периодически берусь за какую-нибудь задачку и решаю.
В данном случае нетривиальная логика - много факторов согласовать нужно.
Ту задачу, которая прозвучала в первом постинге, вообще не так просто решить.
Немудрено, что автор не нашёл примеров в интернете.
Если посмотреть на задачу более абстрактно, то ТЗ можно изменить так:
Есть некоторое количество источников данных и соответствующее им количество приёмников.
Объём данных, которые необходимо транспортировать от каждого источника к приёмнику известен.
Требуется обеспечить транспортировку данных из всех источников до приёмников с заданным ограничением количества объёма данных в единицу времени.
Применения:
- Cкачивание файлов из интернета с ограничением скорости (например, со скоростью не более 1Мбит/сек):
- Фоновое резервное копирование данных в локальной сети, не перегружая её;
-
> Демо © (20.04.10 02:21) [23]
Ну Саш. Я очень сильно сомневаюсь, что ты правильно угадал задачу автора.
Если учесть [6], то я за Sha © (19.04.10 09:32) [13].
И за Sha © (19.04.10 10:36) [16].
Не хочется решать X, когда нужно решить Z.
-
Удалено модератором
-
Все проще. Мне надо максимум скорости в обработке.
тс.
есть файл, я его считываю допустим с кусками по 1 мб и затем обрабатываю
скопировал кусок, теперь обрабатывается и пока не считывает другой кусок, при этом загрузка процессора маленькая и скорость обработки не устраивает.
Вопрос такой: будет ли толк в потоках, в плане скорости обработки файла на максимум.
тс
считал кусок - обрабатываю, в это время другой поток считывает кусок и начинает обрабатывать.. и предположим таких 4 потока.
Будет ли это быстрее.. или есть какие-то альтернативы?
-
Забыл сказать, файлики у меня не хилые, могут быть и по 10 и выше гигов.
-
> [true]TRIx (20.04.2010 21:28:26) [26]
Раз нагрузка на процессор низкая, то это значит лишь одно, что система чем то другим занимается, а не обработкой.
-
> [true]TRIx © (20.04.10 21:28) [26]
> Будет ли это быстрее.. или есть какие-то альтернативы?
8 процессоров, 16 потоков.
Будет быстрее. Наверное.
--
Regards, LVT.
-
> Anatoly Podgoretsky © (20.04.10 21:57) [28]
> Раз нагрузка на процессор низкая, то это значит лишь одно,
Тормозной диск :)
--
Regards, LVT.
-
> Leonid Troyanovsky (20.04.2010 22:22:30) [30]
Ну и как тогда помогут потоки, ведь процессор все равно не нагружен. Может над диском и дисковыми операциями надо работать, наверное.
-
> скопировал кусок, теперь обрабатывается и пока не считывает
> другой кусок,
Это обработка даёт низкий процент загрузки процессора или чтение с диска?
-
> Anatoly Podgoretsky © (20.04.10 22:44) [31]
> не нагружен. Может над диском и дисковыми операциями надо
> работать, наверное.
Точно, выкинуть такой диск, на...верное :)
--
Regards, LVT.
-
> Leonid Troyanovsky (20.04.2010 22:53:33) [33]
И четырех процессорную машину с восьми ядерными ксеонами.
-
> Это обработка даёт низкий процент загрузки процессора или
> чтение с диска?
>
А ты автору объясни как это узнать. Ибо он имхо "плавает" в теме. См. [27]
-
ну для начала могбы сказать какое время обработки тебя не устраивает
с учетом того что средняя максимальная скорость чтения дисков примерно 40Мб\сек
10 гиг быстрей чем за 250 сек ты не обработаеш в принципе
а в данном случае будет возможно быстрей будет читать блоками по 10мб
-
> а в данном случае будет возможно быстрей будет читать блоками по 10мб
Не будет.
-
> Не будет.
считать 10раз по 1м дольше чем 1раз по 10м
-
> считать 10раз по 1м дольше чем 1раз по 10м
считать 10 раз по 1м, производя вычисления с прочитанными данными,
быстрее чем считать 10м, а потом все вычислить.
-
не логично :) в данном случае тормоз-диск, а не проц
> при этом загрузка процессора маленькая
-
Логика умеет прекрасно объяснять наблюдаемые факты,
но не так хорошо справляется с их предсказанием.
-
Еще раз. У меня 2 ядра, программа в диспетчере выполняется под 2мя ядрами (галки).
Считывает куски по 512 кб, процессор загружен всего на 50% тс на одно ядро, меня такая скорость обработки не устраивает, пробовал ставить куски больше - результата нет. Я прекрасно понимаю, что диск тормозит процесс обработки. Хотелось бы включить обработку на всю мощь, не знаю как это задействовать. Обработка буфера достаточно тормозная, идет конвертирование.. стоит ли париться насчет потоков, или можно пример как подключить оба ядра на обработку всего этого дела. Думаю без разници, что я включу каким-то макаром второе ядро на полную загрузку, все равно оно не загрузится, так как чтение с диска будет делать паузу при загрузке процесса обработки буфера.
-
> все равно оно не загрузится, так как чтение с диска будет
> делать паузу при загрузке процесса обработки буфера.
Как раз в том случае, когда процесс чтения с диска занимает продолжительное время,обработка информации в дополнительном потоке увеличит общую скорость.
Во время операции чтения/записи процессор вообще не загружен. Именно в это время возможно обрабатывать параллельно данные в памяти.
-
> [true]TRIx © (23.04.10 05:00) [42]
> процессор загружен всего на 50% тс на одно ядро
Как загружены ядра?
первое - 0%, второе - 50%
или
первое - 0%, второе - 100%
-
Думаю, что
первое - 50%, второе - 50%
Так будет, если специально affinity не выставлять.