Трудно сказать, что является «лучшим» решением, если не дано никаких дальнейших критериев определения лучшего.Это может быть
cat file.txt | nl | grep "the"
, если цель состоит в том, чтобы потратить на это минимум программистских часов.Как уже отмечалось в комментариях, узким местом будет время, необходимое для доступа к диску.Размер файла в 30 тыс. Строк по-прежнему должен быть меньше 10 МБ, поэтому просто прочитайте его в один фрагмент памяти, чтобы избежать дополнительных операций чтения с диска.Затем выполните профилирование однопоточного поиска, чтобы проверить, стоит ли прилагать усилия для использования распараллеливания, поскольку это также сопряжено с некоторыми накладными расходами на порождение и координацию потоков и более высокими затратами на обслуживание кода.