|
1 / 1 / 1
Регистрация: 25.10.2011
Сообщений: 42
|
|
Параллельное чтение файла18.01.2013, 15:43. Показов 7772. Ответов 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 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|