Проект по изучению современного С
Это небольшой проект, направленный на изучение современного программирования на С
. Основная цель этого проекта - изучить и понять тонкости современного С
с акцентом на многопоточность и производительность. Проект был вдохновлен поиском дубликатов файлов с помощью C на Youtube. Этот код написан с нуля и отличается ключевыми моментами просмотра:
- Он многопоточный
- Он использует кольцевой буфер
- В нем используется алгоритм blake3 с оптимизацией SIMD
Обзор проекта
Проект вычисляет хэш каждого файла в файловой системе, используя алгоритм хэширования BLAKE3.
BLAKE3 - это криптографическая хэш-функция, которая быстрее, чем MD5, SHA-1, SHA-2, SHA-3 и BLAKE2.
В дополнение к хэшированию, в проекте также реализован кольцевой буфер для многопоточности.
Проект нацелен на повышение производительности. Один поток рекурсивно обходит данный каталог, помещая результаты в кольцевой буфер.
Другие потоки считывают данные из буфера и помещают результаты в хэш-карту. Хэш-карта, наконец, проверяется на наличие нескольких записей в хэше.
Используемые технологии
- C11: Проект написан на C11, последнем стандарте ISO C.
- BLAKE3: Для хэширования файлов.
- Кольцевой буфер: Для эффективной многопоточности.
- uthash: Для хэш-таблицы
Результаты обучения
Благодаря этому проекту вы можете рассчитывать на более глубокое понимание современного программирования на C, включая:
- Передовые концепции
C
, такие как многопоточность. - Использование и реализация современных алгоритмов хэширования.
- Использование и реализация структур данных, таких как кольцевые буферы.
Производительность
Надлежащий анализ производительности не проводился, но код достаточно эффективен для первого проекта:
- Он использует все доступные ядра (16 в моем случае Ryzen 5700 на Inspiron 5515)
- Примерно чуть менее 500 тыс. файлов могут быть хэшированы чуть более чем за 30 секунд.