demond:
А вот как создать каждому потоку свой сектор, я что-то не представляю.
я не представляю как работает перл с памятью поэтому предлагаю чуть экономный для этого вариант
Нужно сделать следующее:
1) создаются потоки
Действия потоков.
а) открывает файл на чтение, создает свой локальный для потока указатель
б) открывает файл на запись. создает локальный для потока указатель на запись
в) устанавливает значение по умолчанию сектору
г) открывает цикл
Действия в цикле:
г.1) считывает строку по формуле /сектор*Количество_строк_в_секторе*количество_потоков + коунтер/
г.1.а - либо завершение цикла если со строкой не все хорошо
г.2) записывает эту строку в указатель записи
г.3) проверяет чтобы коунтер не превышал Количество_строк_в_секторе
г.3.1) увеличивает коунтер
или
г.3.2) увеличивает сектор
условие выхода из цикла eof по всей видимости
д)закрываем указатели
е)закрываем потоки ну или што там нужно сделать
2) объединение получившихся файлов если нужно
а оно по всей видимости нужно )
2.1) открывает файл на запись. создает глобальный для всех потоков указатель на запись
2.2)Создаем потоки
а) Каждый поток открывает свой файл на чтение, создает свой локальный для потока указатель
*здесь скорее всего нужно будет соблюсти тонкость и потоки должны быть в том же порядке и считать те же самые файлы*
б) теперь в основном скрипте создается цикл, выход из которого будет когда все потоки прочтут свои файлы
в) в цикле
в.1) выбираем поток.
в.2) выполняем функцию потока в которой:
в.2.1) блокируется глобальный указатель на запись
в.2.2) октывается цикл который прочтет и впишет текущий сектор
в.2.3) передвинет соответственно курсор на чтение
в.2.4) соответственно изменит текущий сектор
в.2.4) выйдет из цикла и соответственно из функции
г)по сути все цикл сделал то что нужно
осталось только удалить не нужные файлы
это конешно без проверки. и без тестирования. и возможно сомнительно. но мне кажется где то так и можно сделать