Фреймворк 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 )