Если текст, который вы анализируете, состоит из повторяющихся строк и токенов, разбейте файл на куски, и для каждого блока вы можете иметь один поток, предварительно разбив его на токены, состоящие из ключевых слов, «пунктуации», строк идентификаторов, и ценности. Сравнение и поиск строк могут быть довольно дорогими, и передача этого нескольким рабочим потокам может ускорить чисто логическую / семантическую часть кода, если не требуется выполнять поиск и сравнение строк.
Предварительно проанализированные блоки данных (где вы уже выполнили все сравнения строк и "токенизировали" их) затем могут быть переданы в ту часть кода, которая фактически проверяет семантику и упорядочение токенизированных данных.
Кроме того, вы упоминаете, что беспокоитесь о размере файла, занимающего большой объем памяти. Есть несколько вещей, которые вы можете сделать, чтобы сократить бюджет памяти.
Разделите файл на куски и проанализируйте его. Зачитывайте только столько чанков, сколько вы работаете за раз, плюс несколько для «чтения вперед», чтобы вы не остановились на диске, когда завершите обработку чанка перед переходом к следующему чанку.
В качестве альтернативы, большие файлы могут отображаться в памяти и загружаться по запросу. Если у вас больше потоков, работающих над обработкой файла, чем у процессоров (обычно потоков = 1,5-2Х, то процессор подходит для приложений подкачки по требованию), потоки, которые останавливаются при вводе-выводе для файла отображения памяти, автоматически останавливаются ОС до тех пор, пока память готова, и другие потоки продолжат обрабатывать.