Repolode
ruby-concurrency

ruby-concurrency/concurrent-ruby

Ruby-гем с примитивами конкурентности: futures, promises, пулы потоков, агенты, атомы, потокобезопасные коллекции и средства синхронизации.

Звёзды
5,836
Форки
423
Открытые issues
53
Последний коммит
8 дней назад

Что это?

Concurrent Ruby — гем с широким набором абстракций для конкурентного выполнения в Ruby-приложениях. В него входят средства асинхронного выполнения, такие как Promises (единый фреймворк для futures и promises), ScheduledTask и TimerTask, а также пулы потоков и другие исполнители, вдохновлённые Java.

Библиотека также предоставляет потокобезопасные объекты-значения и коллекции, включая потокобезопасные подклассы Array, Hash и Set, высокопроизводительный Map, неизменяемые и изменяемые структуры, а также атомарные типы, например AtomicReference и AtomicFixnum. Для работы с общим состоянием есть Agent и Atom в духе Clojure, а также TVar для программной транзакционной памяти и средства синхронизации, такие как CountDownLatch, Semaphore и ReadWriteLock.

Гем не зависит от внешних гемов и работает с MRI, JRuby и TruffleRuby. Дополнительные C-расширения для MRI доступны в отдельном геме concurrent-ruby-ext, а экспериментальные возможности, например Actor и Channel, входят в сопутствующий гем concurrent-ruby-edge.

Ключевые возможности

  • 01Фреймворк Promises объединяет futures, promises и отложенное выполнение.
  • 02Пулы потоков и другие исполнители, вдохновлённые пакетом конкурентности Java.
  • 03Потокобезопасные коллекции Array, Hash, Set и Map.
  • 04Атомарные ссылки, счётчики и логические значения для обновлений без блокировок.
  • 05Agent и Atom для управления общим состоянием, а также TVar для транзакционной памяти.
  • 06Примитивы синхронизации, включая CountDownLatch, Semaphore и ReadWriteLock.

Сценарии использования

  • Запуск фоновых задач или параллельных операций ввода-вывода в Ruby-сервисе без добавления внешних зависимостей.
  • Координация нескольких потоков с помощью latch, барьеров или семафоров.
  • Планирование периодических или отложенных задач внутри процесса Ruby.
  • Безопасный обмен изменяемым состоянием между потоками с помощью атомов или потокобезопасных коллекций.

Что важно знать

  • Не удалось определить лицензию по метаданным. Перед использованием проверьте файл лицензии в репозитории.
  • Функции дополнительного gem concurrent-ruby-edge могут часто меняться и нарушать обратную совместимость.

Темы

Частые вопросы

Что такое concurrent-ruby?
Ruby-гем с примитивами конкурентности: futures, promises, пулы потоков, агенты, атомы, потокобезопасные коллекции и средства синхронизации. Concurrent Ruby — гем с широким набором абстракций для конкурентного выполнения в Ruby-приложениях. В него входят средства асинхронного выполнения, такие как Promises (единый фреймворк для futures и promises), ScheduledTask и TimerTask, а также пулы потоков и другие исполнители, вдохновлённые Java.
concurrent-ruby можно использовать бесплатно? Какая у него лицензия?
concurrent-ruby распространяется с открытым исходным кодом под лицензией Other. Перед использованием в коммерческих продуктах проверьте условия лицензии.
concurrent-ruby всё ещё поддерживается?
Активно поддерживается. Последний коммит в concurrent-ruby — 16 окт. 2026 г..
Для чего можно использовать concurrent-ruby?
Запуск фоновых задач или параллельных операций ввода-вывода в Ruby-сервисе без добавления внешних зависимостей. Координация нескольких потоков с помощью latch, барьеров или семафоров. Планирование периодических или отложенных задач внутри процесса Ruby. Безопасный обмен изменяемым состоянием между потоками с помощью атомов или потокобезопасных коллекций.
Где скачать concurrent-ruby?
Исходный код и инструкции по установке — на GitHub: https://github.com/ruby-concurrency/concurrent-ruby

Описание создано ИИ на основе README проекта. Статистика GitHub обновляется ежедневно.

Похожие проекты

Синхронизация файлов с открытым исходным кодом в реальном времени: папки синхронизируются между двумя и более компьютерами без центрального сервера.

89,7 тыс.+35 за неделю5,5 тыс.GoMPL-2.0Обновлён 22 часа назад