GNU grep - це швидке, оскільки воно ВИМОГАЄ ГОЛОСУВАТИ НА ВСІЙ ВХОДНІЙ БАЙТ.
GNU Grep дуже швидко , тому що він виконує дуже мало інструкції для кожного BYTE , що
робить погляд на.
GNU grep використовує добре відомий алгоритм Бойєра-Мура, який спочатку шукає остаточну літеру цільового рядка та використовує таблицю пошуку, щоб сказати, наскільки далеко вперед він може пропустити у вхід, коли знайде невідповідний символ.
GNU grep також розгортає внутрішню петлю Boyer-Moore і встановлює записи дельти таблиці Boyer-Moore таким чином, що їй не потрібно робити тест виходу з циклу на кожному розкрученому кроці. Результат цього полягає в тому, що, за межами, GNU grep в середньому менше 3 x86 інструкцій, виконаних для кожного вхідного байта, який він насправді переглядає (і він пропускає багато байтів цілком).
GNU grep використовує необмежену систему вхідних викликів Unix і уникає копіювання даних після їх читання. Більше того, GNU греп уникає ВРУШЕННЯ В ЛІНІЙ. Шукання нових рядків уповільнить показник у кілька разів, тому що для пошуку нових рядків потрібно було б переглянути кожен байт!
Тож замість використання лінійно-орієнтованого введення GNU grep зчитує необроблені дані у великий буфер, шукає буфер за допомогою Boyer-Moore, і лише коли знайде відповідність, він переходить і шукає обмежуючі нові рядки (певні параметри командного рядка, наприклад - n відключити цю оптимізацію.)