Vibe, A single-header lock-free networking library for Linux

Vibe는 Linux용 단일 헤더 락프리 네트워킹 라이브러리로, epoll 기반의 IO 스레드와 다중 프로듀서 단일 컨슈머(MPSC) 큐를 활용해 TCP 및 Unix 소켓 메시징을 효율적으로 처리한다. 메시지는 길이 접두사 프레임으로 전송되며, 브로드캐스트 시 데이터 복사 없이 참조 카운팅으로 관리해 성능과 메모리 효율을 높였다. 비동기 논블로킹 API를 제공하며, 백프레셔를 내장해 과도한 대기 데이터를 방지한다. C언어 단일 헤더 라이브러리로 의존성이 적고, Apache 2.0 라이선스로 공개되어 AI 인프라의 네트워크 통신 최적화에 활용 가능하다.

https://github.com/xtellect/vibe

#networking #linux #lockfree #tcp #c

GitHub - xtellect/vibe: Single-header C library for TCP/IPC messaging on Linux

Single-header C library for TCP/IPC messaging on Linux - xtellect/vibe

GitHub

Atomic Queue

folly의 AtomicQueue는 lock-free MPSC 큐로, 소비자 스레드를 불필요하게 깨우지 않고 효율적으로 작업을 전달하는 메커니즘을 제공한다. 주로 folly::EventBase의 알림 큐로 사용되며, 여러 생산자가 EventBase 스레드에 작업을 전달할 때 최소한의 시스템 호출로 소비자를 깨우는 것을 목표로 한다. 큐는 단일 atomic 변수로 상태를 관리하며, 소비자가 대기 상태에 들어가기 전 큐를 'arm'하고, 생산자가 작업을 푸시할 때만 필요 시 소비자를 깨운다. 이 설계는 epoll 기반 이벤트 루프와 잘 맞으며, 경쟁 조건 없이 안정적인 깨어남을 보장한다.

https://uvdn7.github.io/atomic-queue/

#lockfree #mpscqueue #folly #eventbase #concurrency

Atomic Queue

This post is about folly’s AtomicQueue. It is a lock-free MPSC(multiple-producer-single-consumer) queue that only wakes up the consumer when necessary. It is mainly used as the notification queue for folly::EventBase, as a way to pass work from external threads to be executed on the EventBase thread. In this context, the EventBase is the consumer, and it always runs on the same thread. There can be many producers requesting work to be done inside the EventBase. The main loop of folly::EventBase basically does two things Call libevent’s event_base_loop() and block on epoll_wait if there are no pending tasks to be executed. If some event handlers are ready, the callbacks are executed inline (in event_base_loop()). The callbacks can schedule more work to be done on the EventBase and they are called LoopCallbacks. Execute various tasks (drain the notification queue, aka external tasks, and loop callbacks, aka internal tasks).

Lu’s blog

Невидимый враг многопоточности: False Sharing и кэш-линии процессора

Представьте задачу: мы пишем высоконагруженный сетевой сервис и нам нужно считать входящие пакеты. Чтобы не блокировать потоки мьютексами, мы решаем дать каждому потоку свой собственный счетчик. Нет общих данных — нет блокировок, верно?

https://habr.com/ru/articles/1032804/

#false_sharing #многопоточность #оптимизация #кэш_процессора #lockfree #кэшлиния #производительность

Невидимый враг многопоточности: False Sharing и кэш-линии процессора

Представьте типичную ситуацию: вы оптимизируете высоконагруженный бэкенд или сетевой сервис. И абсолютно неважно, на чем вы пишете — C++, Java, Go или C#. У вас есть несколько потоков, и вы решаете...

Хабр

[Перевод] Структуры данных на практике. Глава 13: Структуры данных без блокировок

«Блокировки — это goto конкурентного программирования», — Морис Херлихи Проблема 60% Наша система логгинга тратила 60% своего времени на ожидание снятия блокировок. Не на выполнение полезной работы, только на одно ожидание. Восемь ядер, пытавшихся записывать сообщения логов, имели общий кольцевой буфер. Реализация была простой: буфер защищался мьютексом. При высокой нагрузке, когда все ядра записывали логи одновременно, профилировщик демонстрировал ужасный паттерн: 60% тактов CPU тратилось на операции с мьютексом. Пропускная способность: 850 тысяч сообщений в секунду. В восьмиядерной системе она должна быть гораздо выше. «Можно ли улучшить ситуацию, отказавшись от блокировок?», — спросил меня мой менеджер во время ревью производительности. Этот вопрос привёл к полной смене архитектуры...

https://habr.com/ru/articles/1021408/

#мьютекс #lockfree

Структуры данных на практике. Глава 13: Структуры данных без блокировок

«Блокировки — это goto конкурентного программирования», — Морис Херлихи Оглавление Глава 1: Разрыв в производительности Глава 2: Иерархия памяти Глава 3: Бенчмаркинг и профилирование Глава 4: Массивы...

Хабр

@paulmckrcu
Azul has the C4 GC which (I think) uses virtual memory mapping to implement the GC read barrier.

#RCU doesn't do compacting reclamation so memory fragmentation would kill you. But if you had a data structure what didn't do that, like a Michael-Scott #lockfree queue, you could use mmap memory protection to trap any stale references, trap the segfault to restart a restartable RCU locked region.

Приложение real-time face swap на чистом Rust: ONNX Runtime, lock-free потоки и 60 кадров в секунду

Большинство инструментов для замены лиц это Python-скрипты, склеенные из PyTorch, OpenCV и надежды. Они работают, но тащат за собой гигабайты зависимостей, требуют правильно настроенного CUDA и разваливаются в тот момент, когда ты пытаешься запустить их в реальном времени. Мне стало интересно: можно ли собрать весь пайплайн на чистом Rust? Без Python. Без PyTorch. Без обёрток. Один бинарник, который скачал, распаковал и запустил. Оказалось, можно. 60 fps на веб-камере. Пайплайн На каждом кадре последовательно отрабатывают четыре нейросети. RetinaFace находит лица и извлекает пять ключевых точек. ArcFace вычисляет 512-мерный эмбеддинг исходного лица. InSwapper принимает регион целевого лица и эмбеддинг источника, на выходе отдаёт заменённое лицо. GFPGAN опционально улучшает результат для более высокого качества. Все четыре модели работают через ONNX Runtime. Никаких кастомных CUDA-ядер, никакого оверхеда фреймворков. Тензор на вход, тензор на выход. Архитектура потоков Три потока, ноль блокировок на горячем пути. Поток захвата получает кадры с веб-камеры через nokhwa и публикует их через ArcSwap. Поток пайплайна подхватывает новые кадры, прогоняет инференс и публикует обработанные кадры через второй ArcSwap. Поток UI читает актуальный буфер и рендерит через egui. Никаких мьютексов на данных кадра. Никаких каналов. Никакого async. Только атомарные счётчики поколений и lock-free замена указателей. Структуры разделяемого состояния занимают ровно по 64 байта каждая и выровнены по кэш-линиям, чтобы исключить false sharing между ядрами. Это проверяется compile-time ассертами.

https://habr.com/ru/articles/1024700/

#Rust #ONNX #Machine_Learning #Computer_Vision #Face_Detection #egui #Open_Source #lockfree #multithreading #realtime

Приложение real-time face swap на чистом Rust: ONNX Runtime, lock-free потоки и 60 кадров в секунду

Большинство инструментов для замены лиц - это Python-скрипты, склеенные из PyTorch, OpenCV и надежды. Они работают, но тащат за собой гигабайты зависимостей, требуют правильно настроенного CUDA и...

Хабр
Optimizing a Lock-Free Ring Buffer | David Álvarez Rosa | Personal Website

A single-producer single-consumer (SPSC) queue is a great example of how far constraints can take a design. In this post, you will learn how to implement a ring …

David Álvarez Rosa | Personal Website
Deep dive into k-CAS: Vesa Karvonen breaks down sweat-free techniques for concurrent, lock-free programming with clear slides and full speaker notes — perfect for systems engineers and PL enthusiasts. Enlightening and practical! #kCAS #Concurrency #LockFree #ParallelComputing #SystemsProgramming #ProgrammingLanguages #VesaKarvonen #Tarides #English
https://watch.ocaml.org/videos/watch/acebc363-12df-4cd6-aec0-e8239ab325e0
k-CAS for sweat-free concurrent programming by Vesa Karvonen

PeerTube

Три стакана на двоих: самая эффективная коммуникация

Речь пойдет о достаточно типичном для приложений реального времени шаблоне взаимодействия между поставщиком и потребителем информации. Поставщик (писатель) пописывает, потребитель (читатель) почитывает. Асинхронно по отношению друг к другу, каждый — в своём темпе. Обмен происходит отдельными сообщениями, и, как это часто бывает с информацией, привязанной к текущему времени, читателю интересна только самая свежая информация, то есть только последнее сообщение, отправленное писателем. Если какое-то из предыдущих сообщений пропущено — не страшно, всё равно пропущенные данные непоправимо устарели. Наиболее эффективная техника, реализующая подобное взаимодействие, известна как тройная буферизация (Triple Buffering). Именно о ней и о её небольших обобщениях пойдет речь в данной статье.

https://habr.com/ru/articles/1002764/

#atomic #c++ #c++20 #realtime #lockfree #algorithm

Три стакана на двоих: самая эффективная коммуникация

Речь пойдет о достаточно типичном для приложений реального времени шаблоне взаимодействия между поставщиком и потребителем информации. Поставщик (писатель) пописывает, потребитель (читатель)...

Хабр

Tôi đã ra series video ngắn hướng dẫn xây dựng queue single‑producer / single‑consumer (SPSC) từ đầu: triển khai sơ khai, lý do có vẻ đúng, và các vấn đề cache, ordering. Sắp tới sẽ chuyển sang thiết kế lock‑free. Rất mong nhận phản hồi từ những người có kinh nghiệm concurrency. #Concurrency #SPSC #LockFree #LậpTrình #Queue #ĐồngThời #VideoSeries

https://youtube.com/playlist?list=PLHricCAtcO58_4dKgQOzIT6rl9ke5vS1w&si=3NBWV9fsrlKHnylV

From Naive to Lock-Free Queues

A step-by-step journey from naive queue implementations to lock-free designs. We start with intuition, break it with real code, and rebuild queues correctly ...

YouTube