home.social

#конкурентность — Public Fediverse posts

Live and recent posts from across the Fediverse tagged #конкурентность, aggregated by home.social.

fetched live
  1. Четверо в одной транзакции: кейс-батлы, PgBouncer под Prisma и реплика, которая показывает пустой инвентарь

    Обе мои предыдущие статьи про этот сайт с кейсами CS2 заканчивались списком того, чего в нём нет: платежей, депозита предметов, кейс-баттлов, рефералки, KYC. Список закрыт — и почти всё сложное в нём свелось к одному вопросу: что происходит, когда несколько человек одновременно двигают одни и те же деньги. Батл на четверых в одной транзакции, порядок блокировок, из-за которого не случается дедлок, PgBouncer под Prisma и правило чтения с реплики, которое нельзя выразить типом.

    habr.com/ru/articles/1084056/

    #postgresql #конкурентность #транзакции #дедлок #pgbouncer #prisma #репликация #кэширование #нагрузочное_тестирование #nestjs

  2. [Перевод] Rewrite It in Rust: когда переписывание действительно оправдано

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

    habr.com/ru/companies/otus/art

    #Rust #RIIR #переписывание_кода #системное_программирование #безопасность_памяти #производительность #конкурентность #open_source #миграция_проекта

  3. Задача взяла lock() и остановила весь рантайм: пять ошибок с блокировками в async Rust

    В async Rust одна неудачно взятая блокировка может остановить весь рантайм — вместе с таймерами и задачами, которые должны были её отпустить. Разберём пять типичных ловушек с Mutex и RwLock и посмотрим, почему привычки из синхронного кода здесь дают сбой. Читать разбор

    habr.com/ru/companies/otus/art

    #rust #tokio #async_Rust #асинхронное_программирование #мьютексы #блокировки #RwLock #дедлоки #конкурентность

  4. Как я случайно напечатал инфляцию в Discord-боте и переделал ставки в тотализатор

    Всё, что ниже — из живого пет-проекта: бот начисляет участникам голосовых каналов баллы лояльности (LP), а на эти баллы люди устраивают пари в стиле Twitch Predictions.

    habr.com/ru/articles/1077434/

    #Java #Spring_Boot #JDA #Discordбот #PostgreSQL #конкурентность #идемпотентность #тотализатор #игровая_экономика #транзакции

  5. Fluent Swap: как я вышел за пределы CRUD и начал разрабатывать matchmaking на Go

    Большинство backend‑проектов начинаются предсказуемо: HTTP‑запрос, бизнес‑логика, SQL и ответ клиенту. Но что изменится, если вместо очередного CRUD нужно одновременно искать собеседников, поддерживать долгоживущие WebSocket‑соединения и не допускать двойного matchmaking? В этой статье я расскажу, как появился Fluent Swap, почему его первая версия работает без базы данных и как очередь в памяти одного Go‑процесса постепенно подводит архитектуру к Redis и горизонтальному масштабированию.

    habr.com/ru/articles/1076800/

    #Go #Golang #websocket #matchmaking #backend #redis #конкурентность #архитектура

  6. Анимации в терминале — это сложно (иногда)

    Не так давно я на ровном месте занялся написанием библиотеки на Go ( spinq ) для, казалось бы, тривиальной задачи — спиннера, который гарантированно не будет ломаться при конкурентных записях в stderr и stdout. Все началось с того, что я писал вообще другой код — консольную утилиту для запуска тестов. И захотел прикрутить туда спиннер. Но не просто спиннер, а такой, что позволил бы использовать оба потока вывода — stderr и stdout, без риска оставить артефакты на экране. Более того, во время анимации мне нужно иметь возможность показывать на экране отчеты по завершившимся тестам, не откладывая это все до конца запуска/остановки спиннера. И так уж почему‑то получилось (спойлер: потому что не слишком просто, иногда совсем невозможно и мало кому нужно), что я не смог найти библиотеку, которая бы мне подошла.

    habr.com/ru/articles/1076736/

    #go #golang #cli #terminal #ansi #progressbar #spinner #акторная_модель #конкурентность

  7. [Перевод] Fire‑and‑forget в Go: практический гайд по управляемым фоновым задачам

    У go func() есть неприятная особенность: вместе с результатом выполнения легко потерять контроль над самой задачей. Разберём, как пропускать такую работу через единый пул воркеров, отвязывать её от контекста запроса и при этом гарантированно дождаться уже принятых задач при штатной остановке сервиса. Разобрать решение

    habr.com/ru/companies/otus/art

    #Go #горутины #конкурентность #многопоточность #каналы #фоновые_задачи #воркеры #контекст #производительность #архитектура_приложений

  8. Человек между агентом и кнопкой: почему слой подтверждения — это такая сложная инженерия

    Мой агент дошёл до состояния, когда я перестал читать письма перед отправкой. Между «агент решил» и «письмо ушло» не было ничего — ни паузы, ни человека, ни записи о произошедшем. Слой подтверждений выглядит как день работы: таблица, кнопка «одобрить», кнопка «отклонить». Я вёл каталог отказов, пока его делал. К релизу в нём было 66 пунктов. Разбираю пять, которые почти всегда переживают первую версию, и показываю, почему 100% покрытия по ветвям ничего не гарантируют.

    habr.com/ru/articles/1073978/

    #llmагенты #python #sqlite #humanintheloop #exactlyonce #тестирование #мутационное_тестирование #конкурентность

  9. Родитель засыпал навсегда: чего Rust не делает за вас в ядре ОС

    Я пишу ядро операционной системы на Rust. Не потому что собираюсь заменить Linux, а потому что мне интересно, что получится, если закладывать безопасность в архитектуру с нуля, а не встраивать в готовое. Довольно быстро выяснилась вещь, о которой в разговорах про Rust в системном программировании говорят реже, чем стоило бы. Язык закрывает один класс ошибок и оставляет другой нетронутым. И второй класс ловится куда хуже первого. Расскажу про конкретный баг, который я ловил дольше всего.

    habr.com/ru/articles/1067986/

    #rust #ядро #операционные_системы #многопоточность #unsafe #конкурентность

  10. Двойная бронь: как мы поймали гонку в записи и закрыли её EXCLUDE-констрейнтом

    Я делаю сервис онлайн-записи для салонов красоты: клиент записывается в чат-боте или на странице, а запись падает в расписание мастера. Однажды мастер написал мне: на 15:00 к ней пришли два клиента. Оба записаны, оба уверены, что слот их. Классическая двойная бронь — и классическая race condition. Разберу, почему наивная проверка «свободно ли время?» не спасает, и как мы закрыли дыру двумя слоями: advisory-lock и EXCLUDE-констрейнтом в PostgreSQL. По пути — один неочевидный подвох с IMMUTABLE , на который легко напороться.

    habr.com/ru/articles/1065522/

    #PostgreSQL #race_condition #двойная_бронь #EXCLUDE_constraint #btree_gist #advisory_lock #SAVEPOINT #tstzrange #целостность_данных #конкурентность

  11. Погружение в многозадачность Python: процессы, потоки, GIL и асинхронность

    Многозадачность кажется простой темой, пока дело не доходит до Python и GIL. В статье разбирается: чем процесс отличается от программы, зачем нужны потоки, что такое ядро процессора и в чём разница между конкурентностью и параллелизмом. Затем – специфика Python: как GIL влияет на потоки, когда стоит использовать процессы, асинхронность или корутины, и чем они отличаются от green threads. Материал сопровождается схемами, рабочими примерами кода и реальными замерами производительности для CPU-bound и I/O-bound задач, а в конце – практические выводы о том, что и когда выбирать.

    habr.com/ru/articles/1048886/

    #python #gil #многопоточность #многопроцессность #asyncio #конкурентность #параллелизм #gevent

  12. Почему миллион корутин на Rust весит меньше, чем сто тысяч на Python

    Миллион асинхронных задач на Rust спокойно живёт в нескольких сотнях мегабайт. Сто тысяч корутин на Python нередко упираются в память раньше. Дело не в том, что “Rust быстрый, а Python медленный” - дело в том, ГДЕ физически лежит состояние приостановленной задачи. Разбираю, во что превращается ваш async fn после компиляции: стейт-машина на стеке против объекта в куче. Сравниваю модели Rust (Tokio), Python (asyncio), C# и JavaScript - кто аллоцирует на каждый await, а кто нет, и почему это видно на счётчике RAM при 100k задач. Внутри: что генерирует компилятор, куда уезжает состояние между await, stackful против stackless, и что с этим делать сегодня.

    habr.com/ru/articles/1046862/

    #async #await #корутины #Rust #Tokio #asyncio #конкурентность

  13. Project Loom: Virtual Threads, Scoped Values и preview #7 Structured Concurrency

    Project Loom меняет привычную модель конкурентности в Java: virtual threads делают потоки дешевле, Scoped Values дают аккуратную передачу контекста, а Structured Concurrency помогает управлять жизненным циклом связанных задач. Разбираем актуальное состояние Loom в JDK 25-27 и что из этого уже можно использовать.

    habr.com/ru/articles/1037932/

    #Java #Project_Loom #Virtual_Threads #Scoped_Values #Structured_Concurrency #JDK_27 #конкурентность #многопоточность #ThreadLocal #OpenJDK

  14. Code Review Horror Stories. Часть 1: Concurrency & Memory в Go-сервисе

    Продолжение прошлой статьи про ошибки на Go-собесах . В тот раз — про лайв-кодинг. Теперь — про code review: когда дают готовый сервис на ~150 строк и говорят “найди что не так, у тебя 30 минут”. Разберём по косточкам реальный код с собеседования — микросервис трекинга рекламных кликов. Багов набралось 21, поэтому делю на две части. Первая — про самое страшное: concurrency, гонки, утечки памяти и горутин. Это то, что роняет сервис в проде. Часть 2 — про API design, ошибки и graceful shutdown — выйдет следом. Актуально для Go 1.26. Из 21 бага на собесе я нашёл 18. Три самых тонких пропустил — потом, дома, перечитал спокойно и выписал. В этой части про concurrency пропустил один — TOCTOU race в дедупликации. Остальные семь — поймал. Расскажу как искал и какими красными флагами зацепился.

    habr.com/ru/articles/1031010/

    #go #golang #code_review #собеседование #конкурентность #goroutine #race_condition

  15. Code Review Horror Stories. Часть 1: Concurrency & Memory в Go-сервисе Продолжение прошлой статьи про ошибки на Go-собесах . В тот р...

    #go #golang #code #review #собеседование #конкурентность #goroutine #race #condition

    Origin | Interest | Match
  16. Разбор threading vs multiprocessing vs asyncio в Python

    При работе с Python да и другими языками программирования часто возникает необходимость ускорения выполнения кода, масштабирования обработки данных или работы с большим количеством сетевых запросов. Именно в Python для решения этих задач существуют три базовых метода. Это: threading, multiprocessing и asyncio. На первый взгляд – механизмы схожие. Но при детальном разборе ясно, что они решают принципиально разные задачи, опираются на разные модели исполнения и обладают своими ограничениями. В статье расскажу об особенностях каждого метода – будет интересно и познавательно.

    habr.com/ru/articles/991478/

    #threading #multiprocessing #asyncio #Python #параллельность #конкурентность #CPUbound #event_loop #многопоточность

  17. Книга: «Go на практике. 2-е изд.»

    Привет, Хаброжители! И так, вы освоили азы Go, что дальше? Чтобы создавать надежные и готовые к эксплуатации Go-приложения, вам нужно научиться реализовывать конкурентность, налаживать сетевые взаимодействия, получать доступ к файлам, использовать такие нативные протоколы передачи данных, как gRPC и TCP/REST, а также разбираться во множестве практических нюансов. В этой книге приводятся готовые решения, которые можно незамедлительно применить в повседневной работе.

    habr.com/ru/companies/piter/ar

    #go #рефлексия #генерация_кода #конкурентность #сетевые_взаимодействия #grpc #дженерики

  18. [Перевод] Честный взгляд на Go: сильные стороны и болезненные ограничения

    Команда Go for Devs подготовила перевод обзора языка Go от практикующего разработчика. Автор без прикрас разбирает сильные стороны Go — конкурентность, простоту и эргономику, — а затем подробно объясняет, почему его разочаровывают enum’ы, неизменяемость и модель ошибок.

    habr.com/ru/articles/984048/

    #go #golang #rust #backend #языки_программирования #конкурентность

  19. [Перевод] Честный взгляд на Go: сильные стороны и болезненные ограничения Команда Go for Devs  подготовила перево...

    #go #golang #rust #backend #языки #программирования #конкурентность

    Origin | Interest | Match
  20. [Перевод] Python 3.14 без GIL: что это значит для веб-разработки

    Команда Python for Devs подготовила перевод статьи о том, как "free-threaded" Python меняет правила игры для веб-сервисов. Автор сравнивает Python 3.14 с GIL и без него на реальных ASGI и WSGI приложениях — и приходит к неожиданному выводу: несмотря на локальные просадки в производительности, "free-threaded" Python уже сейчас может упростить масштабирование и снизить накладные расходы.

    habr.com/ru/articles/967244/

    #Python #GIL #freethreading #вебсервисы #ASGI #WSGI #производительность #конкурентность #Granian #FastAPI

  21. [Перевод] Сборщик мусора в Go. Часть 3: Управление скоростью GC

    Команда Go for Devs подготовила перевод статьи о том, как в Go устроено управление скоростью работы сборщика мусора. TL;DR: даже при тысячах горутин GC подстраивается под нагрузку, выбирая между меньшим числом долгих пауз и большим числом коротких. Итог — разработчику почти не нужно вручную «крутить» настройки, рантайм сам находит оптимальный ритм.

    habr.com/ru/articles/953426/

    #Go #GC #garbage_collection #производительность #конкурентность #рантайм #горутины #память #оптимизация #профилирование

  22. Rust vs Go: честное сравнение для высоконагруженных сервисов Rust и Go часто оказываются по разные стороны инжене...

    #rust #golang #go #backend #highload #производительность #разработка #сравнение #конкурентность #архитектура

    Origin | Interest | Match
  23. [Перевод] Почему асинхронный Python не такой популярный?

    Недавно на Youtube появилась документалка о Python . Примерно в середине ленты есть драматический эпизод о том, как переход от Python 2 к 3 разделил сообщество (спойлер: в конечном итоге этого не случилось ). Первые версии Python 3 (3.0-3.4) в основном делали упор на стабильность и упрощение перехода пользователей с версии 2.7. В 2015 была выпущена версия 3.5 с новой фичей: ключевыми словами async и await для выполнения корутин . Миновало десять лет и девять релизов, через считанные недели выпустят финальную версию Python 3.14. Пока все отвлеклись на фичи разноцветного REPL в 3.14, в release notes появились серьёзные заявления, связанные с конкурентностью и параллелизмом.

    habr.com/ru/articles/943878/

    #конкурентность #параллелизм #gil #async #await #asyncio

  24. Всё про BlockingCollection и фичи с ними

    Привет, Хабр! В .NET живёт старый, понятный инструмент для конкурентной обработки — BlockingCollection<T> . Коллекция, которая упрощает модель producer–consumer, даёт строгую ограниченную вместимость и предсказуемую блокировку при пустоте или переполнении. Да, у нас есть Channel<T> , есть TPL Dataflow, есть миллион самодельных очередей на SemaphoreSlim . Но когда нужны простые правила и железный backpressure без BlockingCollection по-прежнему закрывает задачи хорошо.

    habr.com/ru/companies/otus/art

    #c# #конкурентность #многопоточность #очередь_задач #параллелизм #управление_потоками #отказоустойчивость

  25. [Перевод] Как проверить время и асинхронный код в Go

    Команда Go for Devs подготовила перевод статьи о пакете synctest , который с Go 1.25 стал частью стандартной библиотеки. Он позволяет писать быстрые и надёжные тесты для конкурентного кода, не усложняя сам код. Теперь асинхронные операции можно проверять без долгих ожиданий и флаки-тестов.

    habr.com/ru/articles/943412/

    #go #golang #synctest #тестирование #конкурентность #асинхронность #горутина

  26. [Перевод] Как проверить время и асинхронный код в Go Команда Go for Devs подготовила перевод статьи о пакете  synctest...

    #go #golang #synctest #тестирование #конкурентность #асинхронность #горутина

    Origin | Interest | Match
  27. [Перевод] Как спроектировать потокобезопасный класс в Java

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

    habr.com/ru/companies/otus/art

    #java #Потокобезопасность #конкурентность #Многопоточность #производительности #потокобезопасный_класс #thread_safe

  28. [Перевод] ОС реального времени в эмуляторе Mario, или Как устроены потоки

    В своём предыдущем посте о потоках я привёл импровизированное сравнение 1 : Потоки 2 — это просто состояния сохранения 3 эмулятора 4 , связанные с условием, при котором продолжается их выполнение. В тот момент я подумал, что это неплохая аналогия, но не мог перестать размышлять о ней. Я какое-то время крутил её в голове. Мне кажется, что у этой аналогии есть серьёзный потенциал в качестве инструмента обучения. Поэтому я добавил многопоточность в Super Mario Bros. для NES.

    habr.com/ru/companies/ruvds/ar

    #многопоточность #конкурентность #мьютексы #взаимная_блокировка #потоки #ruvds_перевод

  29. Многопоточность. Снизу вверх. Потоки в языке C#

    Привет, Хабр! Это Дмитрий Бахтенков. Добро пожаловать в третью часть цикла статей «Многопоточность. Снизу вверх»! Мы уже разобрали процессор и операционную систему , а сегодня поговорим про использование потоков в .NET с помощью языка программирования C#. Эта статья — обзор основных возможностей взаимодействия с потоками в .NET.

    habr.com/ru/companies/beeline_

    #многопоточность #потоки #управление_потоками #производительность_приложений #асинхронное_программирование #синхронизация_потоков #конкурентность

  30. Три необсуждаемых вопроса о параллельной распределённой обработке данных — чтобы жить стало легче

    В публикациях по распределённой параллельной обработке данных весьма редко разбираются сценарии отказа с точки зрения совместной работы воркеров и их влияния друг на друга. На примере решения несложного архитектурного кейса автор покажет, что ответов только на 3 вопроса при проектировании будет достаточно для обеспечения жёстких нефункциональных требований.

    habr.com/ru/articles/891744/

    #конкурентность #распределенные_системы #распределённая_обработка_данных #георезервирование #таскменеджер #таскраннеры #датаинжиниринг #параллелизм

  31. Fan-Out, Fan-In с динамической балансировкой горутин в Golang

    Привет, Хабр! Когда речь заходит о конкурентности в Go, паттерн Fan-Out, Fan-In — одна из важных концепций на мой взгляд. Он позволяет распределять задачи между несколькими горутинами и затем собирать результаты обратно в один поток.

    habr.com/ru/companies/otus/art

    #golang #конкурентность #горутины

  32. [Перевод] Сколько памяти нужно в 2024 году для выполнения миллиона конкурентных задач?

    Помните сравнение потребления памяти для асинхронного программирования на популярных языках 2023 года? Мне стало любопытно, как поменялась ситуация за один год на примере самых новых версий языков. Давайте снова проведём бенчмарки и изучим результаты!

    habr.com/ru/articles/862482/

    #graalvm #конкурентность #nodejs #бенчмарки #асинхронные_задачи

  33. [Перевод] Как правильно тестировать конкурентные структуры данных

    Есть потрясающая библиотека Rust под названием loom , которую можно использовать для тщательного тестирования неблокируемых (lock-free) структур данных. Я давно хотел разобраться, как она работает. И сейчас хочу! Но недавно я случайно реализовал небольшой эксперимент, который, как мне кажется, содержит часть идей loom , поэтому о нём стоит написать. Моя цель — не научить вас тому, что нужно использовать на практике (если вы хотите этого, то почитайте документацию loom ), а, скорее, вывести пару идей из фундаментальных принципов.

    habr.com/ru/companies/ruvds/ar

    #ruvds_переводы #конкурентность #параллельные_вычисления #параллелизм #concurrency #структуры_данных #тестирование

Share on Mastodon

Enter the server where you have an account.