Страница 1 из 1

Вопрос про сингалтон, шареный ресурс и много тредов

Добавлено: 08 ноя 2011, 13:53
папа Карло
Есть сингалтон на C#. в нем есть шареный ресурс. Есть пара методов через которые этот шареный ресурс раздается на чтение (метод который может менять ресурс приватен). Высокая конкуренция на раздачу. Ресурс меняется скажем раз в полгода, а читателей которым нужен ресурс много в каждую секунду. Как правильно организовать изменение ресурса в синглетоне _без_даунтайма_ (пару читателей можно обломить или заблокировать пока ресурс апдейтится). чтобы изменить ресурс полностью надо около пары секунд.

Какие будут мысли? Заранее пасиб! :)

Re: Вопрос про сингалтон, шареный ресурс и много тредов

Добавлено: 08 ноя 2011, 14:24
Marmot
папа Карло писал(а):Есть сингалтон на C#. в нем есть шареный ресурс. Есть пара методов через которые этот шареный ресурс раздается на чтение (метод который может менять ресурс приватен). Высокая конкуренция на раздачу. Ресурс меняется скажем раз в полгода, а читателей которым нужен ресурс много в каждую секунду. Как правильно организовать изменение ресурса в синглетоне _без_даунтайма_ (пару читателей можно обломить или заблокировать пока ресурс апдейтится). чтобы изменить ресурс полностью надо около пары секунд.

Какие будут мысли? Заранее пасиб! :)
Как ты знаешь я C# не копегаген, но в Java я бы сделал обычную ссылку ( не volatile) на ресурс и в момент апдейта, просто бы подменял ее, с последующим проходом через write barrier (лок, CAS etc) для проброса в основную память;
Если читатели ждали пол-года, то, скорее всего смогут подождать до очередного сброса кеша, что бы увудеть обновление.
Работать будет ахренительно быстро, а если надо чтобы читатели увидели апдате сразу тогда делай ссылку volatile, тогда правда будешь терять пару сотен циклов на каждом чтении...
Кстати, а " много в каждую секунду" это какой порядок, я тут распинаюсь про случай ~10^5..6/с

Re: Вопрос про сингалтон, шареный ресурс и много тредов

Добавлено: 08 ноя 2011, 14:42
папа Карло
подмена ссылки интересное дело. опфятьже объем данных всего пара сотен килобайт... читатели не видят этот шареный ресурс, они видят результаты на основе данных этого ресурса. т.е. они не видят что ресурс поменялся или нет. в этом весь фикус. я за консистенси тут воюю. если читатель будет читать старые данне которые поменялись, то он получит и увидит совсем не то, и опять же может решение не правильное принять, что еще хуже. :(дынные для пользователя всегда выглядят одинакво, вне зависимости поменялись данные или нет. для энд юзера подмена невидима. порядок чтения примерно что ты привел.

Re: Вопрос про сингалтон, шареный ресурс и много тредов

Добавлено: 08 ноя 2011, 14:56
Marmot
папа Карло писал(а): я за консистенси тут воюю. если читатель будет читать старые данне которые поменялись, то он получит и увидит совсем не то, и опять же может решение не правильное принять, что еще хуже.
Тут весь вопрос в том, насколько часто читатели проходят черес read barrier, ежели часто(99% случаев), то зачем нужен еще один? а если нет, ну тогда volatile

Re: Вопрос про сингалтон, шареный ресурс и много тредов

Добавлено: 08 ноя 2011, 15:04
папа Карло
Marmot писал(а):
папа Карло писал(а): я за консистенси тут воюю. если читатель будет читать старые данне которые поменялись, то он получит и увидит совсем не то, и опять же может решение не правильное принять, что еще хуже.
Тут весь вопрос в том, насколько часто читатели проходят черес read barrier, ежели часто(99% случаев), то зачем нужен еще один? а если нет, ну тогда volatile
прям сейчас я загружаю структуру когда создаю сингалтон объект (пройсходит запись). дальше чтоние происходит без каких либо локов в нестатических методах.

выглядит так, что мне надо просто пометить переменную (статическая не value) как volatile. локать ее на write и читать просто так. мысли?

Re: Вопрос про сингалтон, шареный ресурс и много тредов

Добавлено: 08 ноя 2011, 15:09
Marmot
папа Карло писал(а):
Marmot писал(а):
папа Карло писал(а): я за консистенси тут воюю. если читатель будет читать старые данне которые поменялись, то он получит и увидит совсем не то, и опять же может решение не правильное принять, что еще хуже.
Тут весь вопрос в том, насколько часто читатели проходят черес read barrier, ежели часто(99% случаев), то зачем нужен еще один? а если нет, ну тогда volatile
прям сейчас я загружаю структуру когда создаю сингалтон объект (пройсходит запись). дальше чтоние происходит без каких либо локов в нестатических методах.

выглядит так, что мне надо просто пометить переменную (статическая не value) как volatile. локать ее на write и читать просто так. мысли?
не надо ничего локать, ты вообще знаешь, что такое volatile :) ?
просто читаешь и пишешь...

Re: Вопрос про сингалтон, шареный ресурс и много тредов

Добавлено: 08 ноя 2011, 15:48
папа Карло
Marmot писал(а):
папа Карло писал(а):
Marmot писал(а):
папа Карло писал(а): я за консистенси тут воюю. если читатель будет читать старые данне которые поменялись, то он получит и увидит совсем не то, и опять же может решение не правильное принять, что еще хуже.
Тут весь вопрос в том, насколько часто читатели проходят черес read barrier, ежели часто(99% случаев), то зачем нужен еще один? а если нет, ну тогда volatile
прям сейчас я загружаю структуру когда создаю сингалтон объект (пройсходит запись). дальше чтоние происходит без каких либо локов в нестатических методах.

выглядит так, что мне надо просто пометить переменную (статическая не value) как volatile. локать ее на write и читать просто так. мысли?
не надо ничего локать, ты вообще знаешь, что такое volatile :) ?
просто читаешь и пишешь...
что такое волатил знаю. но ты вообще знаешь что я датабазник, а не сишарп девелопер? :)

Re: Вопрос про сингалтон, шареный ресурс и много тредов

Добавлено: 08 ноя 2011, 21:04
Marmot
папа Карло писал(а): что такое волатил знаю. но ты вообще знаешь что я датабазник, а не сишарп девелопер? :)
IMHO, даже датабазникам полезно понимать как работают современные процессоры и компиляторы...

Re: Вопрос про сингалтон, шареный ресурс и много тредов

Добавлено: 09 ноя 2011, 08:37
папа Карло
Marmot писал(а):
папа Карло писал(а): что такое волатил знаю. но ты вообще знаешь что я датабазник, а не сишарп девелопер? :)
IMHO, даже датабазникам полезно понимать как работают современные процессоры и компиляторы...
возможно, но прям в данный момент этот совет мне не поможет ни под каким углом.

Re: Вопрос про сингалтон, шареный ресурс и много тредов

Добавлено: 09 ноя 2011, 08:39
Marmot
папа Карло писал(а):
Marmot писал(а):
папа Карло писал(а): что такое волатил знаю. но ты вообще знаешь что я датабазник, а не сишарп девелопер? :)
IMHO, даже датабазникам полезно понимать как работают современные процессоры и компиляторы...
возможно, но прям в данный момент этот совет мне не поможет ни под каким углом.
Нужный тебе совет я уже давно дал :)

Re: Вопрос про сингалтон, шареный ресурс и много тредов

Добавлено: 09 ноя 2011, 08:53
папа Карло
Marmot писал(а):
папа Карло писал(а):
Marmot писал(а):
папа Карло писал(а): что такое волатил знаю. но ты вообще знаешь что я датабазник, а не сишарп девелопер? :)
IMHO, даже датабазникам полезно понимать как работают современные процессоры и компиляторы...
возможно, но прям в данный момент этот совет мне не поможет ни под каким углом.
Нужный тебе совет я уже давно дал :)
т.е. сейчас ты просто перешел к простому брюзжанию. :)

Re: Вопрос про сингалтон, шареный ресурс и много тредов

Добавлено: 09 ноя 2011, 09:38
Marmot
папа Карло писал(а):
Marmot писал(а):
папа Карло писал(а):
Marmot писал(а):
папа Карло писал(а): что такое волатил знаю. но ты вообще знаешь что я датабазник, а не сишарп девелопер? :)
IMHO, даже датабазникам полезно понимать как работают современные процессоры и компиляторы...
возможно, но прям в данный момент этот совет мне не поможет ни под каким углом.
Нужный тебе совет я уже давно дал :)
т.е. сейчас ты просто перешел к простому брюзжанию. :)
Да!

Re: Вопрос про сингалтон, шареный ресурс и много тредов

Добавлено: 09 ноя 2011, 09:46
папа Карло
Marmot писал(а):
папа Карло писал(а):т.е. сейчас ты просто перешел к простому брюзжанию. :)
Да!
c'mon man! :) нервные клетки не востанавливаются. :) а вообще все правильно написал. делаем волатил, строим новый объект в паралельном треде и потом только ссылку подвеняем. мне проще, у меня только два случая которые могут привести к изменению данных, оба случая легко контролируются чтобы ничего плохого не оплучилось, но хотелось знать для более дженерал случая. :)