#lockfree — Public Fediverse posts
Live and recent posts from across the Fediverse tagged #lockfree, aggregated by home.social.
-
Невидимый враг многопоточности: False Sharing и кэш-линии процессора
Представьте задачу: мы пишем высоконагруженный сетевой сервис и нам нужно считать входящие пакеты. Чтобы не блокировать потоки мьютексами, мы решаем дать каждому потоку свой собственный счетчик. Нет общих данных — нет блокировок, верно?
https://habr.com/ru/articles/1032804/
#false_sharing #многопоточность #оптимизация #кэш_процессора #lockfree #кэшлиния #производительность
-
Невидимый враг многопоточности: False Sharing и кэш-линии процессора
Представьте задачу: мы пишем высоконагруженный сетевой сервис и нам нужно считать входящие пакеты. Чтобы не блокировать потоки мьютексами, мы решаем дать каждому потоку свой собственный счетчик. Нет общих данных — нет блокировок, верно?
https://habr.com/ru/articles/1032804/
#false_sharing #многопоточность #оптимизация #кэш_процессора #lockfree #кэшлиния #производительность
-
Невидимый враг многопоточности: False Sharing и кэш-линии процессора
Представьте задачу: мы пишем высоконагруженный сетевой сервис и нам нужно считать входящие пакеты. Чтобы не блокировать потоки мьютексами, мы решаем дать каждому потоку свой собственный счетчик. Нет общих данных — нет блокировок, верно?
https://habr.com/ru/articles/1032804/
#false_sharing #многопоточность #оптимизация #кэш_процессора #lockfree #кэшлиния #производительность
-
Невидимый враг многопоточности: False Sharing и кэш-линии процессора
Представьте задачу: мы пишем высоконагруженный сетевой сервис и нам нужно считать входящие пакеты. Чтобы не блокировать потоки мьютексами, мы решаем дать каждому потоку свой собственный счетчик. Нет общих данных — нет блокировок, верно?
https://habr.com/ru/articles/1032804/
#false_sharing #многопоточность #оптимизация #кэш_процессора #lockfree #кэшлиния #производительность
-
[Перевод] Структуры данных на практике. Глава 13: Структуры данных без блокировок
«Блокировки — это goto конкурентного программирования», — Морис Херлихи Проблема 60% Наша система логгинга тратила 60% своего времени на ожидание снятия блокировок. Не на выполнение полезной работы, только на одно ожидание. Восемь ядер, пытавшихся записывать сообщения логов, имели общий кольцевой буфер. Реализация была простой: буфер защищался мьютексом. При высокой нагрузке, когда все ядра записывали логи одновременно, профилировщик демонстрировал ужасный паттерн: 60% тактов CPU тратилось на операции с мьютексом. Пропускная способность: 850 тысяч сообщений в секунду. В восьмиядерной системе она должна быть гораздо выше. «Можно ли улучшить ситуацию, отказавшись от блокировок?», — спросил меня мой менеджер во время ревью производительности. Этот вопрос привёл к полной смене архитектуры...
-
@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 и разваливаются в тот момент, когда ты пытаешься запустить их в реальном времени. Мне стало интересно: можно ли собрать весь пайплайн на чистом 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 и разваливаются в тот момент, когда ты пытаешься запустить их в реальном времени. Мне стало интересно: можно ли собрать весь пайплайн на чистом 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 и разваливаются в тот момент, когда ты пытаешься запустить их в реальном времени. Мне стало интересно: можно ли собрать весь пайплайн на чистом 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
-
Optimizing a Lock-Free Ring Buffer
https://david.alvarezrosa.com/posts/optimizing-a-lock-free-ring-buffer/
#HackerNews #Optimizing #LockFree #RingBuffer #Performance #Concurrency #DataStructures
-
Три стакана на двоих: самая эффективная коммуникация
Речь пойдет о достаточно типичном для приложений реального времени шаблоне взаимодействия между поставщиком и потребителем информации. Поставщик (писатель) пописывает, потребитель (читатель) почитывает. Асинхронно по отношению друг к другу, каждый — в своём темпе. Обмен происходит отдельными сообщениями, и, как это часто бывает с информацией, привязанной к текущему времени, читателю интересна только самая свежая информация, то есть только последнее сообщение, отправленное писателем. Если какое-то из предыдущих сообщений пропущено — не страшно, всё равно пропущенные данные непоправимо устарели. Наиболее эффективная техника, реализующая подобное взаимодействие, известна как тройная буферизация (Triple Buffering). Именно о ней и о её небольших обобщениях пойдет речь в данной статье.
-
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
-
Put a ring on it: a lock-free MPMC ring buffer
#HackerNews #lockfree #MPMC #ringbuffer #concurrency #data #structures #performance
-
Put a ring on it: a lock-free MPMC ring buffer
#HackerNews #lockfree #MPMC #ringbuffer #concurrency #data #structures #performance
-
Put a ring on it: a lock-free MPMC ring buffer
#HackerNews #lockfree #MPMC #ringbuffer #concurrency #data #structures #performance
-
Put a ring on it: a lock-free MPMC ring buffer
#HackerNews #lockfree #MPMC #ringbuffer #concurrency #data #structures #performance
-
Put a ring on it: a lock-free MPMC ring buffer
#HackerNews #lockfree #MPMC #ringbuffer #concurrency #data #structures #performance
-
Введение в атомики. C++
Заметил недостаток качественных статей по атомикам. Сам когда-то столкнулся с тем, что хотел прочитать статью, где простым и понятным языком рассказывается об этом, но, к сожалению, найти не смог.
-
Многопоточность в современном C++: Lock-Free программирование, Memory Ordering и Atomics
Многопоточное программирование в C++ традиционно ассоциируется с мьютексами, condition variables и потенциальными проблемами вроде deadlocks и race conditions. Однако современные стандарты C++ (начиная с C++11 и далее) предоставляют инструменты для написания высокопроизводительного многопоточного кода без классических блокировок. В этой статье рассмотрим продвинутые техники: lock-free программирование, атомарные операции и различные модели упорядочивания памяти.
https://habr.com/ru/articles/963818/
#multithreading_programming #c++ #concurrency #lockfree #atomic
-
Lock-free код и шахматы: где LLM показывают свою несостоятельность
Все мы привыкли к тому, что нейросети творят чудеса. Suno генерирует музыку неотличимую от человеческой, Flux рисует картины лучше многих художников, Claude переводит тексты так, что даже носители языка не сделают это лучше. Создается впечатление, что искусственный интеллект вот-вот заменит нас во всех сферах деятельности. Но есть одна маленькая проблема. Как только задача требует настоящего размышления, а не воспроизведения заученных паттернов, LLM начинают творить такую дичь, что становится стыдно, что знаком с ними.
https://habr.com/ru/articles/935700/
#LLM #шахматы #lockfree #lockfree_algorithms #lockfree_структуры_данных
-
Lock-free код и шахматы: где LLM показывают свою несостоятельность
Все мы привыкли к тому, что нейросети творят чудеса. Suno генерирует музыку неотличимую от человеческой, Flux рисует картины лучше многих художников, Claude переводит тексты так, что даже носители языка не сделают это лучше. Создается впечатление, что искусственный интеллект вот-вот заменит нас во всех сферах деятельности. Но есть одна маленькая проблема. Как только задача требует настоящего размышления, а не воспроизведения заученных паттернов, LLM начинают творить такую дичь, что становится стыдно, что знаком с ними.
https://habr.com/ru/articles/935700/
#LLM #шахматы #lockfree #lockfree_algorithms #lockfree_структуры_данных
-
Lock-free код и шахматы: где LLM показывают свою несостоятельность
Все мы привыкли к тому, что нейросети творят чудеса. Suno генерирует музыку неотличимую от человеческой, Flux рисует картины лучше многих художников, Claude переводит тексты так, что даже носители языка не сделают это лучше. Создается впечатление, что искусственный интеллект вот-вот заменит нас во всех сферах деятельности. Но есть одна маленькая проблема. Как только задача требует настоящего размышления, а не воспроизведения заученных паттернов, LLM начинают творить такую дичь, что становится стыдно, что знаком с ними.
https://habr.com/ru/articles/935700/
#LLM #шахматы #lockfree #lockfree_algorithms #lockfree_структуры_данных
-
Lock-free код и шахматы: где LLM показывают свою несостоятельность
Все мы привыкли к тому, что нейросети творят чудеса. Suno генерирует музыку неотличимую от человеческой, Flux рисует картины лучше многих художников, Claude переводит тексты так, что даже носители языка не сделают это лучше. Создается впечатление, что искусственный интеллект вот-вот заменит нас во всех сферах деятельности. Но есть одна маленькая проблема. Как только задача требует настоящего размышления, а не воспроизведения заученных паттернов, LLM начинают творить такую дичь, что становится стыдно, что знаком с ними.
https://habr.com/ru/articles/935700/
#LLM #шахматы #lockfree #lockfree_algorithms #lockfree_структуры_данных
-
Ruby, Ractors, and Lock-Free Data Structures
https://iliabylich.github.io/ruby-ractors-and-lock-free-data-structures/
#HackerNews #Ruby #Ractors #LockFree #DataStructures #ProgrammingConcurrency
-
Обсуждаем изменения в Go 1.24, мьютексы и пакет unsafe — открытие сезона митапов для гоферов в Москве
С приходом весны из-под сугробов снова начинают прорастать полезные митапы. На первой в сезоне Go-сходке от YADRO предлагаем присоединиться к обсуждению изменений Go 1.24. Эксперты из AvitoTech, Yandex и YADRO подискутируют, как обновления повлияют на код разработчиков. Также вы узнаете, как обеспечить высокопроизводительную конкурентность в Go и с умом применять пакет unsafe. Офлайн-участников ждет демозона с оборудованием для ЦОД и телеком-операторов, технические интерактивы и подарки.
-
Volatile, Lock-free, Immutable, Atomic в Java. Как понять и начать использовать
Привет, меня зовут Денис Агапитов, я руководитель группы Platform Core компании Bercut. Сегодня хочу поговорить об одном из вариантов lock-free алгоритмов в Java. Разберём как с ним связано ключевое слово volatile и паттерн immutable .
https://habr.com/ru/companies/bercut/articles/822253/
#java #atomic #volatile #multithreading #immutable #lockfree
-
Volatile, Lock-free, Immutable, Atomic в Java. Как понять и начать использовать
Привет, меня зовут Денис Агапитов, я руководитель группы Platform Core компании Bercut. Сегодня хочу поговорить об одном из вариантов lock-free алгоритмов в Java. Разберём как с ним связано ключевое слово volatile и паттерн immutable .
https://habr.com/ru/companies/bercut/articles/822253/
#java #atomic #volatile #multithreading #immutable #lockfree
-
[Перевод] Xv6: учебная Unix-подобная ОС. Глава 6. Блокировки
Ядро ОС выполняет программы параллельно и переключает потоки по таймеру. Каждый процессор выполняет поток независимо от других. Процессоры используют оперативную память совместно, поэтому важно защитить структуры данных от одновременного доступа. Потоки испортят данные, если процессор переключится на другой поток, когда первый поток еще не завершил запись. Потоки конкурируют за доступ к структуре данных. Ядро кишит структурами, которые потоки используют совместно. Блокировки защищают данные при конкурентном доступе. Глава расскажет, зачем нужны блокировки, как xv6 реализует и использует блокировки.
https://habr.com/ru/articles/797557/
#xv6 #блокировки #прерывания #взаимоблокировки #потоки #параллельное_программирование #многопоточность #pthreads #lockfree
-
[Перевод] Xv6: учебная Unix-подобная ОС. Глава 6. Блокировки
Ядро ОС выполняет программы параллельно и переключает потоки по таймеру. Каждый процессор выполняет поток независимо от других. Процессоры используют оперативную память совместно, поэтому важно защитить структуры данных от одновременного доступа. Потоки испортят данные, если процессор переключится на другой поток, когда первый поток еще не завершил запись. Потоки конкурируют за доступ к структуре данных. Ядро кишит структурами, которые потоки используют совместно. Блокировки защищают данные при конкурентном доступе. Глава расскажет, зачем нужны блокировки, как xv6 реализует и использует блокировки.
https://habr.com/ru/articles/797557/
#xv6 #блокировки #прерывания #взаимоблокировки #потоки #параллельное_программирование #многопоточность #pthreads #lockfree
-
Code generation around atomics is strange.
What is desired is `lock cmpxchg16b` but it hard work to make compiler produce it.
clang has the best codegen IMO. It took me a while to realize I needed `alignas(16)`
-
This promises to be a good series on #lockfree #algorithms.
-
Wrote a #LockFree (and Obstruction-Free) memory #allocator for use in low-latency real-time threads.
Blocks are 64-byte aligned to avoid false sharing, alloc+free calls of the underlying Bucket- and Bump-Allocators are O(1).
A seperate thread is notified when the Bump-Allocator reaches a watermark. It will then extend the pool of pre-allocated (and pre-faulted) memory, so the Bump-Allocator can continue to serve requests concurrently without syscalls.
https://github.com/tim-janik/anklang/blob/trunk/ase/loft.hh
#Anklang