1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/daemon_c-UTM

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Подробное описание: http://my.oschina.net/DaemonChen/blog/648331 или см. utm-x.x.x.doc
В некоторых областях, таких как обработка финансовых транзакций и игры, где логика достаточно сложна, различные интерфейсы могут использовать и модифицировать некоторые ресурсы данных, что может привести к проблемам параллелизма. Если для каждого ресурса требуется обеспечение его безопасности при параллелизме, анализ становится очень сложным, а сложность часто ведет к ошибкам.

Utm был спроектирован для маскировки проблем параллелизма для отдельных пользователей; то есть, когда пользователь обращается к своим ресурсам, ему не нужно беспокоиться о безопасности параллелизма этих ресурсов (ресурсов, доступ к которым осуществляют несколько пользователей, все равно требуют обработки). Основная идея заключается в том, чтобы сортировать запросы пользователя и последовательно обрабатывать их с помощью потока из пула потоков.

Пример простой ситуации: общая сумма покупок одного товара ограничена. Пользователь A отправляет два запроса на покупку (запрос 1 и запрос 2).

Обычно требуется использование блокировки или атомарных операций внутри запроса на покупку, чтобы избежать одновременной обработки запросов 1 и 2, которая могла бы привести к превышению лимита;А вот в случае использования UTM, такой вопрос не возникает, так как выполнение запроса 1 завершится до начала обработки запроса 2.

И реальные бизнес-процессы содержат множество подобных сценариев, поэтому использование UTM действительно снижает сложность разработки.

Таким образом, один пользователь никогда не столкнётся со случайной обработкой двух своих запросов одновременно, что значительно упрощает разработку. Это также означает меньший шанс конкуренции за ресурсы между несколькими потоками (один пользователь имеет максимум один активный запрос на обработку). Обращения пользователя не будут обрабатываться параллельно, что делает процесс немного медленнее для каждого отдельного пользователя, но обычно количество пользователей намного больше, чем количество ядер процессора, поэтому это не вызывает недостаточного использования CPU. Наоборот, UTM лучше распределяет ресурсы CPU между пользователями, а уменьшение конкуренции означает более эффективную работу программы.Конечно, самое главное — ядро qtm utm само использует блокировки, но они являются небольшими блокировками, которые не создают задержек даже при тысяче или десятках тысяч запросов в секунду от нескольких пользователей. Поэтому нет необходимости разрабатывать версию qtm на основе CAS (Compare and Swap) (узкие места в обслуживании обычно связаны с I/O, особенно с базами данных, и затраты utm кажутся мизерными по сравнению).Характеристики:

  1. UTM гарантирует целостность жизненного цикла пользователя и порядок выполнения; (например: если пользователь пытается войти в систему, а он уже вошел, старая сессия будет автоматически завершена перед новым входом) (например: если пользователь отправил запрос 1, затем запрос 2, то запрос 1 всегда будет выполнен раньше, чем запрос 2)

  2. Запрос пользователя выполняется в порядке, поэтому доступ к ресурсам пользователя не требует учета проблем конкуренции, что снижает сложность разработки.

(например: есть счетчик непрочитанных сообщений пользователя, который можно хранить как int в памяти UTM, если бы это было сделано вне области с гарантией управления конкурентностью, то потребовалось бы использовать AtomicInteger или блокировки для обеспечения целостности этого поля)

  1. Предоставление интерфейсов для ресурсов пользователя обеспечивает различные важные точки жизненного цикла пользователя, позволяя разработчику лучше управлять своими ресурсами пользователя.

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

  1. Высокая конкурентоспособностьХотя самое главное ядро qtm utm имеет некоторые операции блокировки, они являются небольшими блоками, способными справиться с тысячами или даже десятками тысяч запросов от пользователей в секунду.(узкие места обычно связаны с I/O, особенно с базой данных; в сравнении UTM имеет минимальные затраты)

  2. Хорошая совместимость

UTM легко может использоваться на различных серверах (например, SmartFoxServer, Netty)

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Модель пользовательских потоков. Чтобы снизить сложность разработки и избежать проблем с параллелизмом для отдельного пользователя, основной идеей является упорядочивание запросов пользователей и последующая их поочерёдная обработка потоками из пула. При этом пользователю для доступа к собственным ресурсам не нужно учитывать проблемы параллельно... Развернуть Свернуть
GPL-2.0
Отмена

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/daemon_c-UTM.git
git@api.gitlife.ru:oschina-mirror/daemon_c-UTM.git
oschina-mirror
daemon_c-UTM
daemon_c-UTM
master