Lock free algorithm question

Все, что вы хотели знать о программизме, но боялись спросить.
Аватара пользователя
sobomax
Маньяк
Сообщения: 3699
Зарегистрирован: 29 июн 2006, 22:53
Откуда: Vancouver

Re: Lock free algorithm question

Сообщение sobomax »

Marmot писал(а):Неа, те две, это только упрощенное по самое нехочу требование дял формулировки вопроса :), на самом деле там таких обменов может быть мама негорюй, так что глобальный лок это несерьезно. Главная проблема в том, что решение что и как менять принимается в скриптах, на которые накладываются только очень небольшие ограничения. Т.е. или скрипты выполнять в (почти)глобальном локе, и тогда они просто все остановят, либo разбрасывать мелкие локи внутри и снаружи скриптов вокруг критичных операций с риском влетететь в дедлок ну или делать lock free...
Короче похоже ты сам не очень понимаеш зачем и как работают lock free algorithms и как их применить к поставленной задаче. ;-)

Типа ищется некая волшебная палочка которая сразу все разрулит. Согласен с aissp - high-level описание задачи в студию.

-Maxim
Аватара пользователя
Marmot
Графоман
Сообщения: 39328
Зарегистрирован: 17 фев 2003, 17:58
Откуда: Caulfeild
Контактная информация:

Re: Lock free algorithm question

Сообщение Marmot »

sobomax писал(а):
Marmot писал(а):Неа, те две, это только упрощенное по самое нехочу требование дял формулировки вопроса :), на самом деле там таких обменов может быть мама негорюй, так что глобальный лок это несерьезно. Главная проблема в том, что решение что и как менять принимается в скриптах, на которые накладываются только очень небольшие ограничения. Т.е. или скрипты выполнять в (почти)глобальном локе, и тогда они просто все остановят, либo разбрасывать мелкие локи внутри и снаружи скриптов вокруг критичных операций с риском влетететь в дедлок ну или делать lock free...
Короче похоже ты сам не очень понимаеш зачем и как работают lock free algorithms и как их применить к поставленной задаче. ;-)

Типа ищется некая волшебная палочка которая сразу все разрулит. Согласен с aissp - high-level описание задачи в студию.

-Maxim
Короче, пишется онлайн игруха, грубо говоря на полу стоят баночки, с конфетками, монетками и прочей хренотенью.
Емкость баночек ограничена. Кто угодно может одновременно класть, вынимать и перекладывать предметы из баночек.
Вся логика манипулюций с баночками сделана на скриптах
Например, как сделано lock free поедание 5 конфеток из баночки с 6ю конфетками.
- проверяем и запоминаем скока конфеток было, это делает скрипт
- вычисляем скока должно остаться , и это тоже делает скрипт
- делаем CAS, если в баночке уже не 6 конфеток запускаем всю логику поновой :)

С одной баночкой все просто :)

А если надо переложить 80 монеток из баночки с 85 монетками в баночку с 15 монетками, при ограничении, что в баночке не может быть больше 100 монеток :) , вот тут-то и хочется сделать двойной CAS :)

И не забываем, что доступ к баночкам есть у нескольких тысяч игроков, и они одновременно, соревнуются за доступ к ресурсам, т.е. с большой долей вероятности они будут пытаться иметь дело с одними и теми же баночками :)
Ну и, баночки это очень абстрактно, за одну "транзакцию" игрока операций над баночками может быть несколько десятков, если не сотен.
Аватара пользователя
aissp
Маньяк
Сообщения: 2710
Зарегистрирован: 07 ноя 2005, 09:51

Re: Lock free algorithm question

Сообщение aissp »

считаешь себя умнее бога? Смотри в одной баночке 85 монеток в другой 15, вова и петя конкурируют за ресурс, если петя взял 80 монеток из баночки, вова конкретно пролетел мимо. Если в ето время саша успел уже плюнуть в баночку с 15 монетами, то теперь пролетает петя и вынужден вернуть монетки взад, где их тут же прихватывает жадный вова. Не вижу двойного cas=)
Аватара пользователя
Marmot
Графоман
Сообщения: 39328
Зарегистрирован: 17 фев 2003, 17:58
Откуда: Caulfeild
Контактная информация:

Re: Lock free algorithm question

Сообщение Marmot »

aissp писал(а):считаешь себя умнее бога? Смотри в одной баночке 85 монеток в другой 15, вова и петя конкурируют за ресурс, если петя взял 80 монеток из баночки, вова конкретно пролетел мимо. Если в ето время саша успел уже плюнуть в баночку с 15 монетами, то теперь пролетает петя и вынужден вернуть монетки взад, где их тут же прихватывает жадный вова. Не вижу двойного cas=)
А если к тому времени в первую баночку Вася уже положил 30 монет, то Пете некуда будет возвращать монеты :(
Аватара пользователя
aissp
Маньяк
Сообщения: 2710
Зарегистрирован: 07 ноя 2005, 09:51

Re: Lock free algorithm question

Сообщение aissp »

как часто добавляются новые баночки?

какое время манипуляции с одной баночкой?
Аватара пользователя
Marmot
Графоман
Сообщения: 39328
Зарегистрирован: 17 фев 2003, 17:58
Откуда: Caulfeild
Контактная информация:

Re: Lock free algorithm question

Сообщение Marmot »

aissp писал(а):как часто добавляются новые баночки?
Х3, это пока непонятно... не от меня зависит...
aissp писал(а):какое время манипуляции с одной баночкой?
Если под манипуляцией имеется ввиду интервал от нахождения подходящей баночки и до завершение обновления значений, то, опять же Х3, скриптологи могут делать все что они хотят... :(
Аватара пользователя
sobomax
Маньяк
Сообщения: 3699
Зарегистрирован: 29 июн 2006, 22:53
Откуда: Vancouver

Re: Lock free algorithm question

Сообщение sobomax »

Marmot писал(а):Короче, пишется онлайн игруха, грубо говоря на полу стоят баночки, с конфетками, монетками и прочей хренотенью.
А то есть MMOG какой-то. Вот пробегала недавно статья на эту тему в ACM Queue:

http://queue.acm.org/detail.cfm?id=1483106

Там про твою проблему есть хотя и не очень подробно. Но может быть даст толчок в нужном напрвлении:
// Test a container, and insert an object if okay
success = TestPutItem(me, container, item)
if (!success):
Bail()
else:
PutItemInContainer(item, container)

Instead of trying to solve this problem with traditional concurrency approaches, it is best to step back and understand what the programmer is trying to do in this pattern. The programmer wants to update an object, but under some conditions this update may result in an inconsistent state. The function TestPutItem defines which states are consistent. If the language knew this was the consistency function for PutItemInContainer, it could delay the check to ensure consistency without a lock. The language could first gather all of the items to be added to the container and then use the consistency check to place as many as the container can hold. In some cases, the language could even place multiple objects with a single consistency check.
-Maxim
Аватара пользователя
Marmot
Графоман
Сообщения: 39328
Зарегистрирован: 17 фев 2003, 17:58
Откуда: Caulfeild
Контактная информация:

Re: Lock free algorithm question

Сообщение Marmot »

sobomax писал(а):
Marmot писал(а):Короче, пишется онлайн игруха, грубо говоря на полу стоят баночки, с конфетками, монетками и прочей хренотенью.
А то есть MMOG какой-то. Вот пробегала недавно статья на эту тему в ACM Queue:

http://queue.acm.org/detail.cfm?id=1483106
Ну хорошо хоть сняли обвинения в непонимании :)
sobomax писал(а):Там про твою проблему есть хотя и не очень подробно. Но может быть даст толчок в нужном напрвлении:
... The language could first gather all of the items to be added to the container and then use the consistency check to place as many as the container can hold. In some cases, the language could even place multiple objects with a single consistency check.
Слишко это абстрактно, тем более, что с одним контейнером(баночкой) как раз особых проблем нет...
Аватара пользователя
Весенняя
Завсегдатай
Сообщения: 286
Зарегистрирован: 10 окт 2008, 21:15

Re: Lock free algorithm question

Сообщение Весенняя »

Marmot, а вы это на Java пишете? А может и правда стоит попробовать тот аглоритм RDCSS -> CASN из статьи Харриса и др.? Если на Java, то например AtomicStampedReference может пригодиться -- или просто посмотреть, как там сделан CAS для пары (ref, integer) просто как immutable обертка для AtomicReference, или может и использовать можно для пары (тип, значение) -- для замены элементов ссылками на дескрипторы и для статуса дескриптора CASN. Вроде кажется, что должно получиться.
Аватара пользователя
Marmot
Графоман
Сообщения: 39328
Зарегистрирован: 17 фев 2003, 17:58
Откуда: Caulfeild
Контактная информация:

Re: Lock free algorithm question

Сообщение Marmot »

Весенняя писал(а):Marmot, а вы это на Java пишете?
Да
Весенняя писал(а):А может и правда стоит попробовать тот аглоритм RDCSS -> CASN из статьи Харриса и др.?
Ну если соберусь с духом, или сильно припрет, тогда наверное напишу, только как-то мне подозрительно, что никто этого пока не сделал, даже Doug Lea
Весенняя писал(а):Если на Java, то например AtomicStampedReference может пригодиться -- или просто посмотреть, как там сделан CAS для пары (ref, integer) просто как immutable обертка для AtomicReference, или может и использовать можно для пары (тип, значение) -- для замены элементов ссылками на дескрипторы и для статуса дескриптора CASN. Вроде кажется, что должно получиться.
Именно так, для связанных значений любой сложности CAS делается элементарно через AtomicReference и immutable class с этими значениями, также можно сделать и AtomicStampedReference , хотя я думаю, что там все делается через обычный 64-битный CAS, 32 бита на указатель и 32 бита на int. А копаться надо даже не исходниках JDK, а в Hotspot-е, он автоматически подменяет все вызовы на CAS методы на ассемблерные вставки... Если бы там был CASN, то он бы был доступен на уровне Java API :)
Аватара пользователя
CdR
Графоман
Сообщения: 11245
Зарегистрирован: 11 окт 2004, 19:27
Откуда: Европа, центр, за углом направо.

Re: Lock free algorithm question

Сообщение CdR »

Вы все такие умные... Я прям тащусь. :pray:
А что такое CAS? А?
Аватара пользователя
Весенняя
Завсегдатай
Сообщения: 286
Зарегистрирован: 10 окт 2008, 21:15

Re: Lock free algorithm question

Сообщение Весенняя »

Marmot писал(а):только как-то мне подозрительно, что никто этого пока не сделал, даже Doug Lea
Ну может реально не часто требуется (или люди не знают, что им это нужно), а и делать и разъяснять сложно ;-)
Marmot писал(а):а в Hotspot-е, он автоматически подменяет все вызовы на CAS методы на ассемблерные вставки... Если бы там был CASN, то он бы был доступен на уровне Java API :)
Ну да, там в зависимости от платформы вроде compareAndSet делается либо через CAS, либо LL/SC, либо локами, одинарный только :-)
Аватара пользователя
Весенняя
Завсегдатай
Сообщения: 286
Зарегистрирован: 10 окт 2008, 21:15

Re: Lock free algorithm question

Сообщение Весенняя »

CdR писал(а): А что такое CAS? А?
Cowboy Action Shooting

А вы о чем?

:D
Аватара пользователя
CdR
Графоман
Сообщения: 11245
Зарегистрирован: 11 окт 2004, 19:27
Откуда: Европа, центр, за углом направо.

Re: Lock free algorithm question

Сообщение CdR »

Весенняя писал(а):А вы о чем? :D
Я?
JFYI: Я -- спрашиваю!
Аватара пользователя
Marmot
Графоман
Сообщения: 39328
Зарегистрирован: 17 фев 2003, 17:58
Откуда: Caulfeild
Контактная информация:

Re: Lock free algorithm question

Сообщение Marmot »

Весенняя писал(а):
Marmot писал(а):только как-то мне подозрительно, что никто этого пока не сделал, даже Doug Lea
Ну может реально не часто требуется (или люди не знают, что им это нужно), а и делать и разъяснять сложно ;-)
Marmot писал(а):а в Hotspot-е, он автоматически подменяет все вызовы на CAS методы на ассемблерные вставки... Если бы там был CASN, то он бы был доступен на уровне Java API :)
Ну да, там в зависимости от платформы вроде compareAndSet делается либо через CAS, либо LL/SC, либо локами, одинарный только :-)
Кстати, вот тут вот есть некоторые детали про (не)упрядочение LL/SC и CAS http://blogs.azulsystems.com/cliff/2009 ... -ends.html
Что-то это меня слегка напрягло, т.к. я сейчас, исходя из принципа наименьшего действия, вместо CAS2, делаю простое сравнение со старым первым значением, потом сразу же CAS на второе и CAS на первое, в надежде, что вероятность столкновения в этом случае охренительно мала, по моим расчетам, я уязвим только в течении бувально нескольких наносекунд между первым сравнением и последним CAS -ом...
Но все это верно, если все мои операции упорядочены. А оказывается, это как бы не совсем так, в общем случае... :(
Ответить