Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как разными потоками читать один текстовый файл? / 12 сообщений из 12, страница 1 из 1
27.06.2018, 14:51
    #39666572
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разными потоками читать один текстовый файл?
Решил разбить чтение больших файлов на небольшие кусочки (чтобы считанные данные не превышали ОЗУ). Например, первый поток читает первые 100 МБ файла, второй поток читает от 100 до 200 МБ, третий от 200 до 300 МБ...

Так вот если файлы делить на куски по 100 ГБ (т.е. не делить, потому что все файлы меньше этого размера), то обработка завершается успешно. Но как только я делю их по 100 МБ, то через какое- то время программа вываливается с ошибкой. Кстати, этот же алгоритм чтения файлов долго использовался раньше без деления на кусочки и отлично работал, т.е. ошибка как мне кажется именно в многопоточном чтении одного файла.

Как решить?
...
Рейтинг: 0 / 0
27.06.2018, 15:01
    #39666582
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разными потоками читать один текстовый файл?
AlekseySQLКстати, этот же алгоритм чтения файлов долго использовался раньше без деления на кусочки и отлично работал, т.е. ошибка как мне кажется именно в многопоточном чтении одного файла.
Я правильно понимаю что раньше алгоритм работал однопоточно, а теперь многопоточно? Я бы тут искал проблему, а не в работе с файлом.

И ошибку не помешает озвучить вместе со строкой кода, на которой она происходит.
...
Рейтинг: 0 / 0
27.06.2018, 16:26
    #39666691
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разными потоками читать один текстовый файл?
Dima TЯ правильно понимаю что раньше алгоритм работал однопоточно, а теперь многопоточно? Я бы тут искал проблему, а не в работе с файлом.

И ошибку не помешает озвучить вместе со строкой кода, на которой она происходит.

Да, однопоточный алгоритм я натравил на куски файлов. Ошибка происходит в стандартной библиотеки и совершенно в другом месте (скорее всего из- за уже произошедшей ошибки, которая себя никак не проявила). Работа с файлов абсолютно таже, что и была, только теперь он читается несколькими потоками одновременно.
...
Рейтинг: 0 / 0
27.06.2018, 16:28
    #39666694
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разными потоками читать один текстовый файл?
алгоритм чтения файла представляет из себя стандартную связку: std::iostream + getline()
...
Рейтинг: 0 / 0
27.06.2018, 17:52
    #39666756
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разными потоками читать один текстовый файл?
AlekseySQLалгоритм чтения файла представляет из себя стандартную связку: std::iostream + getline()

Дай угадаю: у тебя один iostream на все потоки?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
27.06.2018, 18:17
    #39666773
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разными потоками читать один текстовый файл?
Dimitry SibiryakovДай угадаю: у тебя один iostream на все потоки?..


Каждый поток создает свой отдельный независимый поток iostream и с помощью него читает свой диапазон строк файла.
...
Рейтинг: 0 / 0
27.06.2018, 18:20
    #39666774
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разными потоками читать один текстовый файл?
Значит опять же ищи ошибку в другом месте. Для начала можешь внимательно прочитать её текст.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
28.06.2018, 00:10
    #39666853
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разными потоками читать один текстовый файл?
AlekseySQL, из топика ясно что у тебя (когда-то) существовал однопоточный алгоритм который нормально работал и
который ты переделал в многопоточный и словил баг. С этого надо начинать. Ты что-то нарушил.

Далее ты пишешь

>> Каждый поток создает свой отдельный независимый поток iostream и с помощью него читает свой диапазон строк файла.

Через несколько циклов улучшения этой парадигмы ты изобретёшь свой собственный Hadoop. Вообще, если твоя дисковая
подсистема не параллелится то не имеет большого смысла параллелить и чтение файлов на максимальной скорости.
...
Рейтинг: 0 / 0
28.06.2018, 11:34
    #39667038
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разными потоками читать один текстовый файл?
AlekseySQLДа, однопоточный алгоритм я натравил на куски файлов. Ошибка происходит в стандартной библиотеки и совершенно в другом месте (скорее всего из- за уже произошедшей ошибки, которая себя никак не проявила). Работа с файлов абсолютно таже, что и была, только теперь он читается несколькими потоками одновременно.

+ Алгоритм долго работал в многопоточном режиме с РАЗНЫМИ файлами. Но как только я запустил этот алгоритм с кусками одного и того же файла, то появилась ошибка.
...
Рейтинг: 0 / 0
28.06.2018, 11:40
    #39667040
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разными потоками читать один текстовый файл?
Мы сейчас утонем в версиях.

Может покажешь исходник?
...
Рейтинг: 0 / 0
28.06.2018, 11:53
    #39667050
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разными потоками читать один текстовый файл?
Лучше не исходник, а простой пример кода демонстрирующий проблему.

PS Ты утверждаешь что у тебя криво работает ОС, а это слишком громкое заявление чтобы делать его без доказательств.
...
Рейтинг: 0 / 0
29.06.2018, 11:03
    #39667531
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разными потоками читать один текстовый файл?
Всем спасибо, я нашел ошибку!

Дело в том, что у меня открытые файлы хранятся в специальной коллекции, которую я анализирую на используемость и закрываю более не нужные файлы. Так вот этот механизм надо было переделать при использовании кусков файлов, а я этого не сделал.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как разными потоками читать один текстовый файл? / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]