Это зависит от того, как настроено ваше оборудование. Обычно чтение не требует большой загрузки процессора, благодаря DMA . Это может быть очень дорого, хотя, если оно инициирует выгрузку других приложений. Но это еще не все.
Не читайте огромный файл сразу, если можете
Если ваш файл действительно большой, вы должны использовать mmap или последовательную обработку, когда вам не нужно читать весь файл сразу. Попробуйте употреблять его кусками можно.
Например, для суммирования всех значений в огромном файле вам не нужно загружать этот файл в память. Вы можете обработать это маленькими кусками, накапливая сумму. Память в большинстве случаев является дорогим ресурсом.
Чтение последовательное
Требуется ли для операции чтения файла 1 ядро?
Да, я думаю, что большинство низкоуровневых операций чтения выполняются последовательно (потребляют 1 ядро).
Вы можете избежать блокировки операции чтения, если используете асинхронный ввод / вывод , но это всего лишь разновидность той же техники «чтения маленькими порциями». Вы можете запустить несколько небольших асинхронных операций чтения одновременно, но вы всегда должны проверять, завершена ли операция, прежде чем использовать результат.
См. Также Ответ переполнения стека на связанный вопрос).
Чтение и вычисления параллельно
Ранее я просто создавал 2 потока, один для чтения файла и один для вычисления? Должен ли я создать дополнительный поток для вычислений?
Зависит от того, что если вам нужны все данные для начала вычислений, то нет причин для параллельного запуска вычислений. Придется эффективно ждать, пока чтение не будет завершено.
Если вы можете начать вычисления даже с частичными данными, скорее всего, вам не нужно читать весь файл сразу. И, как правило, гораздо лучше этого не делать с огромными файлами.
Какое у вас узкое место - вычисления или IO?
Наконец, вы должны знать, связана ли ваша задача с вычислениями или с вводом-выводом. Если это ограничено производительностью подсистемы ввода-вывода, то распараллеливание вычислений дает мало преимуществ. Если вычисления очень нагружают процессор и время чтения незначительно, вы можете извлечь выгоду из распараллеливания вычислений. Ввод-вывод, как правило, является узким местом, если вы не занимаетесь обработкой чисел.