Использование гиперпоточности для буферизации чтения файла - PullRequest
0 голосов
/ 25 марта 2019

Если я пытаюсь прочитать файл с помощью Java BufferedReader. Будет ли быстрее использовать многопоточность, чтобы получить следующий фрагмент буфера в Ram, пока я выполняю операции над предыдущим фрагментом буфера?

Я знаю, что чтение является особенно медленным, поэтому поток чтения все равно, вероятно, будет побежден основным потоком, и программа может в конечном итоге ждать, но если запущено еще несколько потоков, есть ли причина, по которой это не ускорит чтение

1 Ответ

1 голос
/ 25 марта 2019

Наверное, нет. (Но если у вас есть время, я рад, что вы попробуете сравнить.)

Как вы говорите сами, поток обработки, скорее всего, просто проведет большую часть своего времени в ожидании потока чтения. И - что еще более важно - вероятно, вы усложняете свое программное обеспечение из-за очень небольшого выигрыша (см. «Преждевременная оптимизация»).

Это не значит, что идея плохая. Давайте предположим, что ваши вычисления очень вычислительно дорогие, а место, из которого вы читаете, очень медленный (например, модем удаленного доступа). Тогда да, вы могли бы выиграть, разделив чтение и выполнив обработку в разных потоках, поэтому ни один из них не должен делать паузу для другого настолько, насколько это возможно. Вы по-прежнему ограничены самыми медленными потоками, и, учитывая большое количество данных, одному из потоков в конечном итоге придется ждать другого.

Примечание по номенклатуре: я сделал предположение, что вместо " hyperthreading ", который является рыночным названием для аппаратной функции процессора, вы действительно имели в виду "многопоточность", которая является концепцией программирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...