Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Парсинг 2GB файла одновременно двумя потоками? 
:(
    Опции темы
unkis
  Дата 11.4.2007, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 802
Регистрация: 8.9.2004

Репутация: нет
Всего: 1



Ребята меня интересует следующее:

Есть файлы размером от 2GB и выше, задача читать этот файл по строчно и  выбирать из строки нужную информацию.

Возможно ли и имеет ли смысл парсить каждый файл несколькими потоками?
Насколько будет выигрыш в скорости, и будет ли он вообще?
И какие проблемы могут возникнуть в такм случаи?

Очень интересно ваше мнение по этому вопросу?

Очень важна скорость


--------------------
www.unkis.com
PM MAIL WWW   Вверх
Бонифаций
Дата 11.4.2007, 19:04 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 827
Регистрация: 15.9.2005
Где: Brisbane

Репутация: 1
Всего: 40



проще попробовать.


--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
skyboy
Дата 11.4.2007, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



Цитата(unkis @  11.4.2007,  18:02 Найти цитируемый пост)
Возможно ли и имеет ли смысл парсить каждый файл несколькими потоками?

смотря какой парсинг. если простой - скорее всего, "узким местом" окажется обращение к носителю. и тогда многопоточность ничего не даст. если же алгоритм процессороемкий, а режим DMA работает - вполне, как мне думается, может быть прибыль: один поток загружает информацию из файла в память, пока другой свою часть обрабатывает...
Можно сделать так: один поток занимается загрузкой данных, а другой - парсит и парсит загруженные данные... 
PM MAIL   Вверх
unkis
Дата 11.4.2007, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 802
Регистрация: 8.9.2004

Репутация: нет
Всего: 1



а что-нибудь типа начать читать с разных концов, 
к примеру один поток читает с начала, а другой с конца?


--------------------
www.unkis.com
PM MAIL WWW   Вверх
nornad
Дата 11.4.2007, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

Репутация: 16
Всего: 31



Вряд ли это ускорит. Простой пример: время на копирование двух больших файлов поочерёдно всегда не больше (обычно меньше почти раза в полтора) времени на копирование тех же файлов параллельно.


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
LSD
Дата 11.4.2007, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Лучше сделать так: один поток читает данные и преобразует их в строки, другой(ие) потоки парсят эти данные.

А вообще skyboy, правильно сказал, тут все зависит от того, что будет узким местом.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
unkis
Дата 11.4.2007, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 802
Регистрация: 8.9.2004

Репутация: нет
Всего: 1



А как понять что тут будет узким местом, если файлы это лог-файлы, которые хранятся на жёстком диске, и я так понимаю что узким местом здесь будет именно жёсткий диск.





--------------------
www.unkis.com
PM MAIL WWW   Вверх
LSD
Дата 11.4.2007, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Во первых, в чем заключается парсинг? Насколько он ресурсоемок?
Во вторых, напиши тест и посмотри на загрузку процессора.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
alexsolo
Дата 12.4.2007, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 5.4.2007

Репутация: нет
Всего: нет



Цитата(unkis @ 11.4.2007,  19:02)
Есть файлы размером от 2GB и выше, задача читать этот файл по строчно и  выбирать из строки нужную информацию.

Если памяти больше 2 GB то можно папить весь файл в память целиком и парсить его хоть 10 потоками (кстати, JVM параллелит потоки на разные ядра на многоядерниках?) Если памяти меньше размера файла, то каждый поток мапит фрагмент за фрагментом файла максимально допустимой длины и обрабатывает его. 
PM MAIL   Вверх
Бонифаций
Дата 12.4.2007, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 827
Регистрация: 15.9.2005
Где: Brisbane

Репутация: 1
Всего: 40



Если вы пап^H^H^Hмам^H^H^Hмапите  файл то физической памяти не расходуется. Только адресное пространство. по крайней мере в unix-ах/linux-ах




--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
LSD
Дата 12.4.2007, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(alexsolo @  12.4.2007,  13:53 Найти цитируемый пост)
кстати, JVM параллелит потоки на разные ядра на многоядерниках?

По умолчанию JVM использует потоки ОС, так что это от ОС зависит.

Мапить файл в память можно, но проблема в том, что из байтов его еще нужно преобразовать в символы, а затем строки.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
alexsolo
Дата 12.4.2007, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 5.4.2007

Репутация: нет
Всего: нет



Цитата

Если вы мапите  файл то физической памяти не расходуется. Только адресное пространство. по крайней мере в unix-ах/linux-ах

Я только пока под Windows мапил - там с этим делом строго smile
Цитата

Мапить файл в память можно, но проблема в том, что из байтов его еще нужно преобразовать в символы, а затем строки.

Ну,  это, не сложно smile
В общем надо плясать от ТЗ - что за OS, сколько памяти, сколько ядер у CPU ну и тесты погонять - если чтение с диска даже просто с
BufferedInputStream сделать, то основное время обработки все равно в самом парсере будет  smile 






PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1278 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.