|
1 / 1 / 1
Регистрация: 25.10.2011
Сообщений: 42
|
|
Параллельное чтение файла18.01.2013, 15:43. Показов 7820. Ответов 20
Метки нет (Все метки)
собственно сабж. Возможно ли ?
Суть такова, есть огромный текстовый файл, с ссылками, нужно считать ссылку, перейти по ней, если она доступна просканировать исходный код, если там найдется искомая строка, то эту ссылку поместить в другой файл. Т.к файлы содержат от 5000 ссылок (1 ссылка - 1 строка в файле), то важна скорость выполнения. Возможно ли впринципе параллельное чтение 1 файла ? Что хочу: хочу входной файл разбить на части, и каждому потоку, допустим их будет 5, передавать определенную часть файла, и они уже будут их параллельно сканировать. С помощью класса RandomAccessFile и метода seek() можно устанавливать позицию каретки. seek(long pos) Sets the file-pointer offset, measured from the beginning of this file, at which the next read or write occurs. Но как установить ее в определленую строку из файла ? Не попасть на середину файла ? Может у кого есть другие соображение ? Сама программа со всеми методами готова, но только 1 поток
0
|
|
| 18.01.2013, 15:43 | |
|
Ответы с готовыми решениями:
20
Параллельное чтение книг Параллельное чтение из txt файлов Параллельное чтение и запись нескольких файлов |
|
68 / 68 / 1
Регистрация: 21.12.2012
Сообщений: 458
|
|
| 18.01.2013, 16:14 | |
|
Выложили бы здесь код,было бы полегче
0
|
|
|
1 / 1 / 1
Регистрация: 25.10.2011
Сообщений: 42
|
||||||
| 18.01.2013, 16:20 [ТС] | ||||||
0
|
||||||
|
68 / 68 / 1
Регистрация: 21.12.2012
Сообщений: 458
|
|
| 18.01.2013, 16:23 | |
|
Незнаю,может я ошибаюсь,но если прочитать файл с помощю сканера,и каждую строку файла читать в новом потоке?
0
|
|
|
1 / 1 / 1
Регистрация: 25.10.2011
Сообщений: 42
|
|
| 18.01.2013, 16:27 [ТС] | |
|
Не понял, поточней что ты имеешь ввиду ?
0
|
|
|
68 / 68 / 1
Регистрация: 21.12.2012
Сообщений: 458
|
|
| 18.01.2013, 16:29 | |
|
Прочитать файл с помощью сканера java.util.ScannerБи каждую строку читать в новом потоке,надо гуглить или послушать мудрых
0
|
|
|
1 / 1 / 1
Регистрация: 25.10.2011
Сообщений: 42
|
|
| 18.01.2013, 16:44 [ТС] | |
|
Подождем умных
0
|
|
|
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
|
|
| 18.01.2013, 17:14 | |
|
Параллельное чтение ни к чему хорошему не приводит - головки дисков будут постоянно позиционироваться в разные области, что сильно замедляет скорость чтения.
Я бы читал сначала файл со ссылками, целиком (5000 - это мизер). А дальше - все ссылки в одну очередь и ее уже разгребать в несколько потоков. Если ссылок ОЧЕНЬ много и не хочется их все грузить - можно сделать динамическую подгрузку. Поток загружает сколько-то ссылок, допустим, 1000, и останавливается. Очередь разгребают другие потоки. Если в очереди осталось меньше 100 ссылок - поток подчитывает следующие 1000 ссылок.
0
|
|
|
1 / 1 / 1
Регистрация: 25.10.2011
Сообщений: 42
|
|
| 18.01.2013, 17:23 [ТС] | |
|
А как это реализвать, если можно хотя бы наброски кода ?
Добавлено через 1 минуту Да, 5000 это мизер, согласен, они даже в один поток читаются быстро. Но вот файлы с 200 000 ссылок уходят в вечность...
0
|
|
|
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
|
||||||||||||
| 18.01.2013, 17:41 | ||||||||||||
0
|
||||||||||||
|
1 / 1 / 1
Регистрация: 25.10.2011
Сообщений: 42
|
|
| 18.01.2013, 17:52 [ТС] | |
|
Ссылки нужно не только считать, а еще перейти по ним и сканировать исходный код страницы
![]() Добавлено через 6 минут Проблемы со скоростью как раз таки при сканировании самого исходного кода возникают. И как это исправить потоками я пока не пойму.
0
|
|
|
68 / 68 / 1
Регистрация: 21.12.2012
Сообщений: 458
|
|
| 18.01.2013, 17:55 | |
|
Skipy,а можно все эти ссылки держать как бы уже прочитанными,не читать каждый раз файл,а в памяти,что-ли их держать,или вы считаете это плохим решением?
Добавлено через 41 секунду Я просто пишу поисковик,и краулер (естественно)Очень интересна эта тема
0
|
|
|
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
|
|
| 18.01.2013, 17:57 | |
|
Я так понял, что Вы говорили про чтение файла с диска (именно в этом контексте я упомянул "мизер").
А загрузка 200000 файлов по сети - это ПО ЛЮБОМУ будет долго. Особенно если в один поток. Если Вы даже 10 ссылок в секунду будете анализировать, что в один поток маловероятно, - это займет 20000 секунд, пять с половиной часов. Полсотни потоков может сильно помочь.
0
|
|
|
1 / 1 / 1
Регистрация: 25.10.2011
Сообщений: 42
|
|
| 18.01.2013, 18:03 [ТС] | |
|
А если взять все строки из файла записать в List а потом в несколько потоков передавать разные части этого листа, они ведь по индексам идут ?
Добавлено через 2 минуты И каждый поток будет анализировать свою часть List'a, это возможно ?
0
|
|
|
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
|
|||
| 18.01.2013, 18:09 | |||
|
Или прочитанные файлы? Если да - Вы представляете объем этих файлов? У Вас памяти хватит? Добавлено через 2 минуты Вам нужна очередь (queue, например, java.util.concurrent.ConcurrentLinkedQue ue), из которой Вы могли бы извлекать из начала ссылки по одной. Каждый поток взял ссылку, обработал, взял следующую. И так пока они есть. Вот тут все будут работать параллельно пока не кончатся ссылки.
1
|
|||
|
68 / 68 / 1
Регистрация: 21.12.2012
Сообщений: 458
|
|
| 18.01.2013, 18:11 | |
|
0
|
|
|
1 / 1 / 1
Регистрация: 25.10.2011
Сообщений: 42
|
|
| 18.01.2013, 18:12 [ТС] | |
|
Спасибо, погуглю на счет queue (Даже не знаю как читается правельно
)
0
|
|
|
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
|
||
| 18.01.2013, 18:12 | ||
|
2
|
||
|
1 / 1 / 1
Регистрация: 25.10.2011
Сообщений: 42
|
|
| 18.01.2013, 18:17 [ТС] | |
|
А можно пример использования этой queue ?
Добавлено через 2 минуты AbstractQueue, ArrayBlockingQueue, ConcurrentLinkedQueue, DelayQueue, LinkedBlockingQueue, LinkedList, PriorityBlockingQueue, PriorityQueue, SynchronousQueue, Их много оказывается
0
|
|
|
|
|
| 18.01.2013, 19:43 | |
|
по поводу 200к и 9мб, у меня был код читавший по 8 хмл файла размерами по 150мб (хз сколько строк) в 8 потоков (там был рейд массив со скоростью 320), так вот:
скорость парсинга была увеличена только тогда, когда я перед парсингом их зазиповал и прямо из зип архива инпут стримами их грузил в память и парсил. Самое медленное на компе это винт, а рандом аксесс это ещё и усугубляет превращая линейное чтение в нелинейное, поэтому даже оврлоад по унзипу не сказался на скорости так как это тормозил винт
1
|
|
| 18.01.2013, 19:43 | |
|
Помогаю со студенческими работами здесь
20
Зеркальный том Windows 7. Есть ли параллельное чтение? Параллельное чтение, обработка и запись в файл OpenMP Чтение чисел из файла. Чтение после конца потока невозможно Как заменить чтение строки из консоли на чтение текстового файла? Чтение файла, чтение названия папки где находится файл, запись данных на PHP Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
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
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|