SyncEm: Thread-Safe Decorators in Ruby

The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:

Я написал некоторое время назад об обеспечении потокобезопасности в ООП и о том, как это можно достичь с помощью декораторов. Также было сказано, что очень важно убедиться в том, что объекты потокобезопасны (в Ruby и в Java), особенно в веб-приложениях, которые работают с несколькими потоками (ну, в большинстве случаев). Вот SyncEm, простой Ruby-модуль, который делает это возможным с помощью единственного декоратора.

Взгляните на это простое веб-приложение на Ruby, которое увеличивает внутренний счетчик при каждом щелчке мыши:

Для подсчета посещений используется класс Visits, который может быть определен следующим образом (он хранит счетчик в файле):

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

Чтобы сделать его потокобезопасным, вы можете использовать SyncEm, небольшой Ruby-пакет, который я создал всего несколько месяцев назад. Вот как:

Здесь мы просто декорируем объект с помощью потокобезопасного декоратора, который перехватывает все вызовы всех методов объекта и делает их синхронизированными с единственным инкапсулированным семафором.

Этот механизм будет работать только в Ruby или подобных интерпретируемых языках. Я не смогу сделать то же самое на Java или C++. Но в Ruby, Python, PHP, JavaScript и многих других языках, подобные декораторы могут быть очень полезными.

Я использую его, например, в этом веб-приложении.

Translated by ChatGPT gpt-3.5-turbo/42 on 2023-11-18 at 05:03

sixnines availability badge   GitHub stars