Forwarded from PSD | Дизайн-пространство
Design Language System: новая парадигма дизайна с ИИ-агентами
Новая статья: Нейросети переплюнули дизайнеров? Узнай, как искусственный интеллект творит дизайн быстрее и лучше
Читать на дизайнерс | #статья
Новая статья: Нейросети переплюнули дизайнеров? Узнай, как искусственный интеллект творит дизайн быстрее и лучше
Читать на дизайнерс | #статья
Forwarded from Daily Coding 🔥
Forwarded from Dezzigners
Forwarded from Node.JS [ru] | Серверный JavaScript
Implicit ABA в async-генераторах: тихая гонка в очередях сообщений
Работа с очередями в Node.js — дело привычное. Kafka, RabbitMQ, Redis Streams. Берёшь async-генератор, читаешь сообщения, обрабатываешь. Но implicit ABA problem в async-генераторах выстреливает в production неожиданно: yield — точка прерывания, и пока генератор приостановлен, другой воркер может изменить состояние очереди.
Где прячется проблема
Вот production-ориентированный пример:
Проблема: пока ты висел на yield, другой процесс мог удалить сообщение, сместить offset. Ты возвращаешься — работаешь с устаревшим состоянием. Это классическая implicit ABA, где "последний offset" меняется под капотом.
Как диагностировать
Логируй время до и после yield. Если пауза больше пары секунд при высокой конкурентности — это красный флаг. Используй детерминированные идентификаторы сообщений, не полагайся на offset как на истину. Смотри на время обработки: между итерациями риск ABA растёт.
Что делать
Самый прямой путь — транзакционная обработка с блокировкой:
Совет: используй снэпшоты и проверяй их свежесть на каждой итерации. Или явно проверяй поколение очереди — если оно изменилось, рвать цикл.
Ошибка
Не пытайся кэшировать offset между yield в глобальных переменных. Это усугубляет ABA, особенно в системах с несколькими воркерами и долгими HTTP-запросами. Если есть такой код в проде — скорее всего, ты уже видел странные баги, которые не воспроизводятся локально.
Вывод: Async-генераторы элегантны, но их "заморозка" между yield требует явного управления состоянием очереди, иначе гонка становится неявной и трудноуловимой.
Работа с очередями в Node.js — дело привычное. Kafka, RabbitMQ, Redis Streams. Берёшь async-генератор, читаешь сообщения, обрабатываешь. Но implicit ABA problem в async-генераторах выстреливает в production неожиданно: yield — точка прерывания, и пока генератор приостановлен, другой воркер может изменить состояние очереди.
Где прячется проблема
Вот production-ориентированный пример:
async function* readMessages(queue) {
let lastOffset = await queue.getLatestOffset();
while (true) {
const messages = await queue.poll(lastOffset);
if (messages.length === 0) continue;
yield messages;
for (const msg of messages) {
if (msg.offset >= lastOffset) {
lastOffset = msg.offset + 1;
}
}
}
}Проблема: пока ты висел на yield, другой процесс мог удалить сообщение, сместить offset. Ты возвращаешься — работаешь с устаревшим состоянием. Это классическая implicit ABA, где "последний offset" меняется под капотом.
Как диагностировать
Логируй время до и после yield. Если пауза больше пары секунд при высокой конкурентности — это красный флаг. Используй детерминированные идентификаторы сообщений, не полагайся на offset как на истину. Смотри на время обработки: между итерациями риск ABA растёт.
Что делать
Самый прямой путь — транзакционная обработка с блокировкой:
async function* safeReader(queue) {
while (true) {
const result = await queue.pollWithLock();
yield result;
await queue.commit();
}
}Совет: используй снэпшоты и проверяй их свежесть на каждой итерации. Или явно проверяй поколение очереди — если оно изменилось, рвать цикл.
Ошибка
Не пытайся кэшировать offset между yield в глобальных переменных. Это усугубляет ABA, особенно в системах с несколькими воркерами и долгими HTTP-запросами. Если есть такой код в проде — скорее всего, ты уже видел странные баги, которые не воспроизводятся локально.
Вывод: Async-генераторы элегантны, но их "заморозка" между yield требует явного управления состоянием очереди, иначе гонка становится неявной и трудноуловимой.
Forwarded from PSD | Дизайн-пространство
Не могу разобраться с собой и карьерой в 2026 году. Что делать?
В 2026 году многие дизайнеры сталкиваются с неопределённостью и сложным рынком. В статье дают практические рекомендации, как разобраться в своих целях, выбрать направление и двигаться вперёд, даже когда всё кажется размытым.
Читать на дизайнерс | #Карьера
В 2026 году многие дизайнеры сталкиваются с неопределённостью и сложным рынком. В статье дают практические рекомендации, как разобраться в своих целях, выбрать направление и двигаться вперёд, даже когда всё кажется размытым.
Читать на дизайнерс | #Карьера
Forwarded from PSD | Дизайн-пространство
Деконструкция красоты: почему "неправильно” новое "круто"?
Узнайте у дизайнеров, почему концепция "идеального дизайна" мертва в 2026 году. Второй выпуск Rebuilding Creativity ждет вас
Читать на дизайнерс | #статья
Узнайте у дизайнеров, почему концепция "идеального дизайна" мертва в 2026 году. Второй выпуск Rebuilding Creativity ждет вас
Читать на дизайнерс | #статья
Forwarded from Gamedev suffering (Andrei Apanasik)
Разработчики Eve Online опубликовали исходники движка игры.
Выложили кучу модулей, начиная с симуляции физики и графического движка, заканчивая модуля для UI, звука и сетки.
И всё по MIT-лицензии. Т.е. можно спокойно и в коммерческих целях использовать.
Выложили кучу модулей, начиная с симуляции физики и графического движка, заканчивая модуля для UI, звука и сетки.
И всё по MIT-лицензии. Т.е. можно спокойно и в коммерческих целях использовать.