On-line: Andrey, гостей 1. Всего: 2 [подробнее..]
АвторСообщение



Пост N: 33
Зарегистрирован: 31.01.13
ссылка на сообщение  Отправлено: 11.03.13 17:13. Заголовок: Как сделать многопотоковое архивирование папок?


В примерах дистрибутива есть пример работы с плагином 7zip (SAMPLES\Advanced\7-Zip). Пытался переделать его на многопотоковое, но не хватает ума или с плагином 7zip это не возможно?

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 14 [только новые]


постоянный участник




Пост N: 2732
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.03.13 18:19. Заголовок: rovix пишет: Пыталс..


rovix пишет:

 цитата:
Пытался переделать его на многопотоковое,



Пример в студию !


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 749
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 11.03.13 22:51. Заголовок: rovix пишет: Пыталс..


rovix пишет:

 цитата:
Пытался переделать его на многопотоковое, но не хватает ума или с плагином 7zip это не возможно?


Вот что говорит доступная wikipedia:
многопоточное сжатие. Если на одноядерном процессоре скорость 7-Zip близка к WinRAR[10], то на двухъядерном 7-Zip намного быстрее. Помимо обычной многопоточной оптимизации программа имеет очень хорошую оптимизацию для технологии Hyper-Threading и «виртуальных» ядер в процессорах Intel;

А теперь скажите, что Вы хотели бы получить от супер-многопоточности?

Да, и вдогонку, может другую GUI попробуете?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 34
Зарегистрирован: 31.01.13
ссылка на сообщение  Отправлено: 12.03.13 09:45. Заголовок: Задача: Есть порядка..


Задача: Есть порядка 30 папок которые нужно архивировать каждый день. Если запустить архивирование поочередно, то архивирование завершается примерно за час. Если же запустить архивирование параллельно в пяти процессах, то минут 20. Может быть я не совсем корректно выразился на счет потоков. Сейчас это реализовано по следующему алгоритму:
-создается массив по количеству потоков архивирования
-в каждом потоке (псевдопотоке), физически просто вызывается внешний 7-zip с параметрами, но id процесса запоминается в соответствующей ячейке массива, т.е. в случае пятипотокового архивирования первые пять процессов, точнее их id запоминаю в элементах массива
-в цикле проверяю наличие процессов с указанными в массиве id
-если процесс закончился, то запускается следующий
и так далее

Пять выбрано из-за того, что машинка о восьми головах, так чтобы на процесс создания архивов оставались свободные ресурсы и для других целей. В менеджере задач четко видны ядра, которые заняты 7-zip.

В демо-примере подкупила графическая полоска индикатора.
Однако в первых же поисках споткнулся об то, что харбор вроде бы не может получить id запущенного процесса, по крайней мере в имеющейся документации я такого обнаружить не смог :(
во-вторых, не имея четкого представления работы с потоками не смог переделать демо-пример для запуска тестового примера с запуском процесса архивирования с помощью 7-zip'овской длл'ки в потоке. Отбросил все лишние рюшечки в демопримере до
 цитата:
#include "MiniGUI.ch" 
#define ALONE_7Z '7za.exe' // console variant of 7-Zip archiver
Static cPath7z := '' // Full path to installed 7-Zip archiver

Procedure Main
// Формируем полное имя установленного 7-Zip. Для упрощения, принимем
// что программа установлена в каталог по умолчанию
cPath7z := GetProgramFilesFolder() + '\7-zip\7z.exe'

Define window wMain ;
At 0, 0 ;
Width 140 ;
Height 100 ;
Title 'Demo 7-Zip interaction' ;
Icon 'main.ico' ;
Main ;
NoMaximize ;
On init FuncOne()

@ 20, 15 ButtonEx btnCreate ;
Caption 'exit' ;
Action wMain.release ;
DEFAULT
End window
Center window wMain
Activate window wMain
Return

proc FuncOne()
Local cCommand := 'A 21.7z "D:\MiniGUI\SAMPLES\Advanced\7-Zip\test"', ;
cCommand2 := 'A 22.7z "D:\MiniGUI\SAMPLES\Advanced\7-Zip\230900.dbf"', ;
nDLLHandle

cCommand := RTrim( cCommand )

If !( ( nDLLHandle := LoadLibrary( '7-zip32.dll' ) ) > 0 )
MsgStop( "Can't load 7-zip32.dll.", 'Error' )
Else
DllCall( nDLLHandle, DC_CALL_STD, 'SevenZip', _HMG_MainHandle, cCommand )
FreeLibrary( nDLLHandle )
Endif
return


а дальше никак не получается. Пробую, как мне кажется, самое простое:

 цитата:
#include "MiniGUI.ch" 
#define ALONE_7Z '7za.exe' // console variant of 7-Zip archiver
Static cPath7z := '' // Full path to installed 7-Zip archiver

Procedure Main
// Формируем полное имя установленного 7-Zip. Для упрощения, принимем
// что программа установлена в каталог по умолчанию
cPath7z := GetProgramFilesFolder() + '\7-zip\7z.exe'

Define window wMain ;
At 0, 0 ;
Width 140 ;
Height 100 ;
Title 'Demo 7-Zip interaction' ;
Icon 'main.ico' ;
Main ;
NoMaximize ;
On init arc()

@ 20, 15 ButtonEx btnCreate ;
Caption 'exit' ;
Action wMain.release ;
DEFAULT
End window
Center window wMain
Activate window wMain
Return

proc arc()
thID1 := hb_threadStart( @FuncOne())
return

proc FuncOne()
Local cCommand := 'A 21.7z "D:\MiniGUI\SAMPLES\Advanced\7-Zip\test"', ;
cCommand2 := 'A 22.7z "D:\MiniGUI\SAMPLES\Advanced\7-Zip\230900.dbf"', ;
nDLLHandle

cCommand := RTrim( cCommand )

If !( ( nDLLHandle := LoadLibrary( '7-zip32.dll' ) ) > 0 )
MsgStop( "Can't load 7-zip32.dll.", 'Error' )
Else
DllCall( nDLLHandle, DC_CALL_STD, 'SevenZip', _HMG_MainHandle, cCommand )
FreeLibrary( nDLLHandle )
Endif
return

а оно не работает...

2AlexMyr
Возможно нужно было какие-нибудь ключики в команду вставить для включения этой многопроцессорной оптимизации, каюсь не пробовал, может тогда и правда смысла не будет заморачиваться.
P.S.
Какую другую GUI предлагаешь попробовать?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 752
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 12.03.13 10:00. Заголовок: rovix пишет: Возмож..


rovix пишет:

 цитата:
Возможно нужно было какие-нибудь ключики в команду вставить для включения этой многопроцессорной оптимизации, каюсь не пробовал, может тогда и правда смысла не будет заморачиваться.

Для проверки запустите вручную архивирование и посмотрите в диспетчере задач сколько процессов 7z исполняется, если используете стандартный алгоритм lzma, то многопоточность вроде автоматом используется.
rovix пишет:

 цитата:
P.S.
Какую другую GUI предлагаешь попробовать?

для этой задачи GUI не поможет.rovix пишет:

 цитата:
Задача: Есть порядка 30 папок которые нужно архивировать каждый день.

у себя использую arc, больше 2гиг с кучей папок примерно 35 минут, просто запускаю стандартным диспетчером задач в виндовс по времени.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 35
Зарегистрирован: 31.01.13
ссылка на сообщение  Отправлено: 12.03.13 22:57. Заголовок: AlexMyr, что такое a..


AlexMyr, что такое arc?

Пробовал 7zip у себя на компе явно видно что запускается в мультипотоковом режиме (и диспетчер задач пишет 5 потоков), а когда запускаю на сервере, то полное впечатление что на одном ядре идёт хотя диспетчер задач пишет, что 3 потока :(

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 756
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 12.03.13 23:07. Заголовок: rovix пишет: что та..


rovix пишет:

 цитата:
что такое arc?

http://freearc.org/ru/Default.aspx

Спасибо: 1 
ПрофильЦитата Ответить



Пост N: 36
Зарегистрирован: 31.01.13
ссылка на сообщение  Отправлено: 13.03.13 09:08. Заголовок: у меня около 30 разн..


у меня около 30 разных папок (архивировать в разные файлы) объёмом около 20гиг :(.
Папки разные от нескольких десятков мег до 4-х с лишним гиг.
Пока создается архив с самой большой папкой в параллельных процессах успевает заархивироваться всё остальное :)
Так что "многопоточность форева!"

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 37
Зарегистрирован: 31.01.13
ссылка на сообщение  Отправлено: 13.03.13 09:19. Заголовок: за ссылочку спасибо,..


за ссылочку спасибо, потестирую.
А спрашивал потому, что когда-то на заре эры компьютеризации был такой архиватор, но тогда он значительно уступал arj, потом и rar'y

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2737
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 13.03.13 20:50. Заголовок: А почему остановилис..


А почему остановились на архиваторе 7z ?
Есть же в МиниГуи zip-библиотеки. Запустить их в несколько потоков и пускай делают архив...
Или каждый поток - определенное кол-во файлов или папок...
На выбор и желание !

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2745
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 13.03.13 23:31. Заголовок: rovix пишет: Если ж..


rovix пишет:

 цитата:
Если же запустить архивирование параллельно в пяти процессах, то минут 20


При такой операции системка повиснет наглухо , бедный HDD..........придется менять его каждые пол годика (или чаще ).
Попробуйте тем же Total Commander покопировать разные папки в разные точки назначения (в фоне каждый процесс) ,
или c Winrar проделайте ту же операцию. Проц грузится почти на все 100 , будь в нем хоть 20 ядер (ядреных) ;)
Возможно с винтом SSD все обстоит не много лучше , не знаю не юзал.
Мне кажется что нужно понимать когда и где юзать эту самую многопоточность.

rovix пишет:

 цитата:
у меня около 30 разных папок (архивировать в разные файлы) объёмом около 20гиг :(.
Папки разные от нескольких десятков мег до 4-х с лишним гиг.
Пока создается архив с самой большой папкой в параллельных процессах успевает заархивироваться всё остальное :)
Так что "многопоточность форева!"


А попробуйте то же самое сделать последовательно, папка за папкой (без потоков) . Будет какой то выигрыш по времени ?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 38
Зарегистрирован: 31.01.13
ссылка на сообщение  Отправлено: 14.03.13 11:43. Заголовок: Давайте попробуем пр..


Давайте попробуем представить что же происходит при многопользовательском доступе к базе данных с жестким диском на сервере...
Система абсолютно не виснет, в менеджере задач явно видно какие ядра заняты 7zip`ом, не знаю почему, но на сервере 7zip не забирает все ядра под себя.

Выигрыш по времени примерно четырехкратный.

Andrey пишет:

 цитата:
А почему остановились на архиваторе 7z ?

Из-за объёмов, 7zip сжимает значительно сильнее.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2744
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.03.13 04:58. Заголовок: rovix пишет: Из-за ..


rovix пишет:

 цитата:
Из-за объёмов, 7zip сжимает значительно сильнее.


Я тут тесты провел, несколько папок, файлы *.dbf *.fpt *.dbt *.tbr *.txt *.log - объем примерно 5Гб,
сделал архивацию несколькими архиваторами, получилось:
формат zip (через Winrar) - архив получился 144Мб, создает за 2 мин.
формат arc (через FreeArc) - архив получился 61Мб, создает за 13 мин.
формат zip (через 7z) - архив получился 145Мб, создает за 5 мин.
формат 7z (через 7z) - архив получился 85Мб, создает за 12 мин.
Ну конечно нужно подбирать методы сжатия для увеличения быстродействия....

7z медленно делает, хотя и хорошо.
Я тоже бы не отказался от 4х кратного выигрыша по времени!
Пиши тогда автору программы, там и мыло его есть. О результатах потом сообщи....


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 39
Зарегистрирован: 31.01.13
ссылка на сообщение  Отправлено: 15.03.13 18:23. Заголовок: Andrey, спасибо за т..


Andrey, спасибо за тесты, сам собирался проверить, но всё никак на работе запарка, думаю сегодня всё же вечерком проверю freearc в параллельном режиме.
Однако не понял про какого автора идёт речь? Я же не 7zip улучшаю, а пытаюсь узнать как в харборе запускать параллельно несколько процессов и следить за ними. Под параллельно имеется ввиду системный запуск программы из харбора что-то типа Run().

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2749
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.03.13 19:01. Заголовок: rovix пишет: Однако..


rovix пишет:

 цитата:
Однако не понял про какого автора идёт речь?



Advanced\7-Zip\Demo.prg
/*
* MINIGUI - Harbour Win32 GUI library Demo
*
* Access to 7z archives by 7-zip32.dll demo
* (c) 2008 Vladimir Chumachenko <ChVolodymyr@yandex.ru>
*
* Revised by Grigory Filatov <gfilatov@inbox.ru>
*/

// Complementary libraries:
// xhb.lib, hbdll32.lib



Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 577
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет