1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mll-facil.io

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
LIBRARIES.md 9.5 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 10.03.2025 09:54 5aeb79c

Независимые библиотеки, предлагаемые facil.io

Фреймворк facil.io основан на модульной архитектуре, что означает, что многие модули могут быть выделены и использованы независимо как отдельные библиотеки.

Библиотеки в одном файле

Следующие библиотеки состоят из одного заголовочного файла, который может использоваться независимо.

Просто скопируйте заголовочный файл в ваш проект и используйте его.

Пожалуйста, обратите внимание, что это не полный список (например, библиотеки Base64 и SHA256 не упомянуты).

Типы данных:

Эти библиотеки типов данных предназначены для упрощения выполнения многих распространённых задач, предоставляя простой и удобный API.

Они все спроектированы для использования контейнера данных (который можно выделить как на стеке, так и на куче), а также динамического управления памятью для максимальной гибкости.

Хотя они часто предпочитают удобство использования производительности, эти библиотеки очень эффективны.

  • Библиотека динамических строк: эта библиотека проста в использовании и помогает работать с двоичными и C строками.

    Например:

    // контейнер на стеке
    fio_str_s str = FIO_STR_INIT;
    fio_str_write(&str, "Hello", 5);
    fio_str_printf(&str, " world, %d", 42);
    printf("%s\n", fio_str_data(&str)); // "Hello world, 42"
    fio_str_free(&str);
    ```    // контейнер на куче
    fio_str_s *str = malloc(sizeof(*str));
    *str = FIO_STR_INIT;
    // использовать fio_str_free и free при завершении работы:
    fio_str_free(str);
    free(str);

    Важно отметить, что короткие строки (до 30 байт на 64-битных машинах) будут храниться внутри контейнера без дополнительных выделений памяти, что повышает производительность для многих распространённых случаев использования.

  • Библиотека динамических массивов: была спроектирована для упрощения работы с динамическими массивами.

    Например:

    // контейнер на стеке (может также располагаться на куче)
    fio_ary_s ary = FIO_ARY_INIT;
    fio_ary_push(&ary, (void *)1);
    printf("Значение pop массива: %zd", (size_t)fio_ary_pop(&ary));
    fio_ary_free(&ary);
  • Библиотека динамических хэш-карт: была спроектирована для упрощения работы с хэш-картами.

    В следующем примере используются типы данных void * для значений и uint64_t для ключей, но легко использовать строки или любой другой тип данных в качестве ключей:

    // контейнер на стеке (может также находиться в куче).
    fio_hash_s hash = FIO_HASH_INIT;
    fio_hash_insert(&hash, 1, (void *)1);
    printf("Поиск ключа хеша %u => значение: %zd", 1, fio_hash_find(&hash, 1));
    printf("Поиск ключа хеша %u => значение: %zd", 2, fio_hash_find(&hash, 2));
    fio_hash_free(&hash); // используйте FIO_HASH_FOR_FREE для освобождения данных объекта или пользовательских ключей.
    ```* [Библиотека связанных списков](lib/facil/core/types/fiobj/fio_llist.h): была спроектирована для того, чтобы сделать работу со связанными списками простой.
    
    Библиотека поддерживает как внешние (узел содержит указатель), так и встроенные (узлы содержат фактические данные) типы связанных списков.
    

Парсеры:

Одношаблонные библиотеки парсеров часто объявляют обратные вызовы, которые должны быть определены (реализованы) файлом, который включает библиотеку.

Например, парсер JSON ожидает от клиента реализовать fio_json_on_null. Обратные вызовы используются для построения структуры данных, содержащей результаты.

Эти однофайловые парсеры включают:

  • Парсер JSON: JSON расшифровывается как JavaScript Object Notation и широко используется для обмена данными. Подробнее о JSON можно найти на json.org.

  • Парсер шаблона Mustache: Mustache — это схема шаблонизации. Подробнее о Mustache можно найти на mustache.github.io.

  • Парсер RESP: RESP (REDis Serialization Protocol) — это протокол, используемый Redis для передачи данных и коммуникаций. Подробнее о RESP можно найти на redis.io.* Парсер WebSockets: WebSockets используются для двусторонней связи через Интернет. В отличие от чистого TCP/IP, этот дополнительный слой преобразует схему коммуникации из потока сообщений в сообщение-ориентированную схему, сохраняющую границы сообщений. Подробнее о WebSockets можно найти на websocket.org.* Парсер MIME multipart: Этот парсер декодирует HTTP multipart данные, используемые при отправке формы (например, при загрузке файла или отправке формы методом POST). Подробнее о MIME можно найти на wikipedia.org. Честь упоминания принадлежит парсеру HTTP/1.1. Это библиотека парсера с двумя файлами (заголовочный файл и файл источника), которая полностью независима от слоя ввода-вывода или остальной части facil.io.

Библиотеки с двумя файлами

Следующие библиотеки состоят как из заголовочного, так и из файла источника, которые могут использоваться независимо.

Просто скопируйте оба файла в ваш проект и используйте их.

Управление памятью

Библиотека fio_mem представляет собой кастомный менеджер памяти, созданный для сетевых целей, минимизирующий конкуренцию за блокировки и предоставляющий минимальные затраты на выделение памяти.

Я написал её для решения проблемы фрагментации памяти и расконфликтования при многопоточных выделениях памяти.

Менеджер памяти не возвращает всю память системе. Вместо этого используется пула памяти, который сохраняется, что улучшает конкурентность даже через границы процессов, минимизируя системные вызовы.

Дополнительные детали можно найти в заголовочном файле fio_mem.h и файле реализации fio_mem.c.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/mll-facil.io.git
git@api.gitlife.ru:oschina-mirror/mll-facil.io.git
oschina-mirror
mll-facil.io
mll-facil.io
master