powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Lock-free: Доведём очередь до ума
25 сообщений из 147, страница 5 из 6
Lock-free: Доведём очередь до ума
    #39552533
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давайте про lock-free всё-таки :)
...
Рейтинг: 0 / 0
Lock-free: Доведём очередь до ума
    #39552629
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOUДавайте про lock-free всё-таки :)есть у меня одна идейка, гарантированная lock-free очередь на простых принципах, правда с ограничением размера.
Нужно?
...
Рейтинг: 0 / 0
Lock-free: Доведём очередь до ума
    #39552639
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)правда с ограничением размера.
Нужно?едва ли:SOFT FOR YOUЕсли я правильно понял, его реализация - имеет ограничение на количество элементов. А я хочу без ограниченияхоть габр на тесте миллион элементов и заливал, но нужно строго "без ограничения"
...
Рейтинг: 0 / 0
Lock-free: Доведём очередь до ума
    #39552650
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)есть у меня одна идейка, гарантированная lock-free очередь на простых принципах, правда с ограничением размера.
Нужно?
Выкладывай. Даже если ТСу не нужно - пригодится кому-нибудь другому.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Lock-free: Доведём очередь до ума
    #39552725
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan),

Я думал, будет ли выгода при кольцевом буфере. И пришёл к выводу, что всё примерно так же - 2 каса на чтение, и столько же на запись. Но в любом случае выложи. Почему нет.

Вообще, самая простая реализация очереди - это два стека. Стек Tail обычный и Head инвертированный.
Но я уже писал, почему не стал строить реализацию на её основе.

А что с ошибками? По прежнему выдаёт эксепшн?
...
Рейтинг: 0 / 0
Lock-free: Доведём очередь до ума
    #39552920
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOU,

https://svn.code.sf.net/p/cl4fpc/code/Containers/lfqueues.pas
есть правда где-то ошибка на x86 c TAtomicInt = UInt64;, найти времени нет, но 32-битная версия пашет как задумано
заправлю потом в бложик описание реализации

тест
https://svn.code.sf.net/p/cl4fpc/code/Containers/test/FreeLockTest.lpr




SOFT FOR YOUА что с ошибками? По прежнему выдаёт эксепшн?
ну если так закрыть конечно нет, но правильно же он от этого не заработает
20945540 ИМХО правильное рассуждение, нужен механизм проверки нахождения элемента в очереди
...
Рейтинг: 0 / 0
Lock-free: Доведём очередь до ума
    #39552955
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan),

Код жёсткий :)
Правда, я так и не понял, зачем столько стейтов

По поводу Exception-ов
Я ничего не закрыл. Я сделал инкремент счётчика при записи FHead.
Эксепшны сыпятся или нет?

По поводу поста - я ведь не против, может действительно дело в мусорном значении Next
Но вот незадача - в случае эмуляции контейнера через стек - ошибок не происходит. По крайней мере у меня. А он работает по тому же принципу
Да и придумать вариант, как может возникнуть ошибка - я тоже придумать не могу
...
Рейтинг: 0 / 0
Lock-free: Доведём очередь до ума
    #39553129
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOUkealon(Ruslan),

Код жёсткий :)
Правда, я так и не понял, зачем столько стейтов
всё очень просто, попытаюсь объяснить в блоге как время будет
PS: баг исправил
SOFT FOR YOUПо поводу Exception-ов
Я ничего не закрыл. Я сделал инкремент счётчика при записи FHead.
Эксепшны сыпятся или нет?

По поводу поста - я ведь не против, может действительно дело в мусорном значении Next
Но вот незадача - в случае эмуляции контейнера через стек - ошибок не происходит. По крайней мере у меня. А он работает по тому же принципу
Да и придумать вариант, как может возникнуть ошибка - я тоже придумать не могу

TestUG не проходит, хотя проработал без сбоев заметно дольше

с заменой 20945254 проходит без проблем вроде как
...
Рейтинг: 0 / 0
Lock-free: Доведём очередь до ума
    #39553165
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan),

Спасибо
Конечно интересно почитать блог

Но давай исправим ошибку в моей реализации
А потом замерим производительность :)

Я просто думаю, что контейнеры надо создавать опционально: с лимитированным количеством элементов и нет. Потому как в лимитированных реализациях может быть определённый профит, как с точки зрения функционала, так и с точки зрения производительности.
...
Рейтинг: 0 / 0
Lock-free: Доведём очередь до ума
    #39553166
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan),

Мне кажется, или у тебя ограничение на количество элементов жёстко - 21?
Кстати DefaultValue можно не хранить, есть "функция" Default(T)
...
Рейтинг: 0 / 0
Lock-free: Доведём очередь до ума
    #39553265
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOUkealon(Ruslan),

Спасибо
Конечно интересно почитать блог

Но давай исправим ошибку в моей реализации
А потом замерим производительность :)

Я просто думаю, что контейнеры надо создавать опционально: с лимитированным количеством элементов и нет. Потому как в лимитированных реализациях может быть определённый профит, как с точки зрения функционала, так и с точки зрения производительности.тут всё довольно просто:
исходя из тестов что я знаю на i7: конкурентно в секунду можно провести 40 млн обменных операций с одной кэш-линейкой
т.е. тупо InterlockedIncrement из 4-х и более потоков можно сделать 40млн/c, в один поток - 150млн/c

представленный алгоритм упирается сейчас в 2.5 млн (добавление + удаление) в секунду
твой (пока работает) - упирается в 3.5 млн (добавление + удаление)/c
тут насколько я их понимаю добились - 16 млн. /c, и в явовской - 4 млн./c (проц вроде бы такой же как и у меня, но с другой стороны хз как они тестят, например забитая очередь явно шустрее идёт, чем близкая к нулю)

т.е. ещё оптимизировать и оптимизировать, наверное, первое - это функцию разгрузки
SOFT FOR YOUkealon(Ruslan),

Мне кажется, или у тебя ограничение на количество элементов жёстко - 21?
Кстати DefaultValue можно не хранить, есть "функция" Default(T)
10 и 21, в зависимости от типа (нужно 3 бита на состояние одной ячейки)
Default(T) - в fpc старой версии её добавить не успели
...
Рейтинг: 0 / 0
Lock-free: Доведём очередь до ума
    #39553780
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan),

Всё-таки производительность у AtomicIncrement, AtomicExchange и AtomicCmpExchange разная. Наверняка на 8 байтах картина ещё больше меняется. Я бы не стал обобщать :)

И не совсем ясно как ты замеряешь производительность :)
По первой ссылке стек, он разумеется, выполняется быстрее очереди. Его теста я что-то не увидел
Да и джававского тоже )

Ну и потом, я не уверен на счёт твоей очереди, но вот в моей важно, есть конкуренция за оба поля или нет
Т.е. если ты сначала добавишь 10 элементов, а потом извлечёшь - картинка будет более разумная. Нежели чем гонять один и тот же элемент туда-обратно.
...
Рейтинг: 0 / 0
Lock-free: Доведём очередь до ума
    #39553809
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOU,

практически одинаковая для текущей разрядности, во всяком случае на i7 (cmp версии только при успехе считать надо)
у себя проверь, недолго

соответственно при наличии 2-х операций на вставке, 2-х на удалении это 10млн/c максимум для моего проца
...
Рейтинг: 0 / 0
Lock-free: Доведём очередь до ума
    #39553919
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOU,

занятную функцию нашёл - WaitOnAddress
по идее для разгрузки самое то
...
Рейтинг: 0 / 0
Lock-free: Доведём очередь до ума
    #39554273
_StarikPro_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Народ, разъясните пожалуйста (признаюсь, всю ветку темы ТС не читал), чем не устраивает очередь с кольцевым буфером в котором указатель на тайл читающего и пишущего потоков "не пересекаются " при условии что для обеспечения многопоточности создаём одну очередь на каждую пару потоков??? Соотв-но, к примеру, для одного читающего и N в него пишущих создаём N очередей который опрашивает читающий... При этом отпадает необходимость в применении спец. синхронизирующих системных функций...
...
Рейтинг: 0 / 0
Lock-free: Доведём очередь до ума
    #39554489
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_StarikPro_Народ, разъясните пожалуйста (признаюсь, всю ветку темы ТС не читал), чем не устраивает очередь с кольцевым буфером в котором указатель на тайл читающего и пишущего потоков "не пересекаются " при условии что для обеспечения многопоточности создаём одну очередь на каждую пару потоков??? Соотв-но, к примеру, для одного читающего и N в него пишущих создаём N очередей который опрашивает читающий... При этом отпадает необходимость в применении спец. синхронизирующих системных функций...ситуация: 1 читающий, много пишущих - не самая распространённая
одну очередь проще использовать, она становистя слабым местом систем типа акторов, например


вот все и меряются ...
...
Рейтинг: 0 / 0
Lock-free: Доведём очередь до ума
    #39554679
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan),

Так он под Windows 8
Лучше тогда уж вручную брейкпоинт на память делать

_StarikPro_,

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

Если говорить в теории, то ценность моего решения заключается в нескольких пунктах.
Во-первых, нет явного ограничения на количество элементов в очереди (а в кольцевом есть)
Во-вторых, нет ограничения на количество читающих или пишущих потоков
В-третьих, производительность по идее (если речь не о первом элементе в очереди) на высоком уровне - только 2 атомика на операцию
...
Рейтинг: 0 / 0
Lock-free: Доведём очередь до ума
    #39554688
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOUkealon(Ruslan),

Так он под Windows 8
Лучше тогда уж вручную брейкпоинт на память делатьи в каком потоке он вызовется?
...
Рейтинг: 0 / 0
Lock-free: Доведём очередь до ума
    #39555407
_StarikPro_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SOFT FOR YOU,
....
Если говорить в теории, то ценность моего решения заключается в нескольких пунктах.
Во-первых, нет явного ограничения на количество элементов в очереди (а в кольцевом есть)
Во-вторых, нет ограничения на количество читающих или пишущих потоков
В-третьих, производительность по идее (если речь не о первом элементе в очереди) на высоком уровне - только 2 атомика на операцию

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

Пока вижу только одно достоинство, и то сомнительное - простота в применении...

kealon(Ruslan) ,
ситуация: 1 читающий, много пишущих - не самая распространённая

Я это привёл в качестве примера, для доходчивости, так сказать, варианты можно реализовать любые...
...
Рейтинг: 0 / 0
Lock-free: Доведём очередь до ума
    #39555409
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_StarikPro_,

Посмотри, где в моем коде ошибка?
...
Рейтинг: 0 / 0
Lock-free: Доведём очередь до ума
    #39555421
_StarikPro_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SOFT FOR YOU...(если речь не о первом элементе в очереди)...
И опять же, не понимаю, к чему эти условности... первый не первый элемент, в чём проблема закольцевать очередь - тогда все элементы становятся равными
...
Рейтинг: 0 / 0
Lock-free: Доведём очередь до ума
    #39555465
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_StarikPro_,

Я пока вижу, что ты языком чешешь
Кольцевой-некольцевой

Ни реализации твоей, ни ответа на вопрос, озвученный в топике
...
Рейтинг: 0 / 0
Lock-free: Доведём очередь до ума
    #39555797
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребят, я попробовал заменить Fill на AtomicExchange
Ошибка пока не воспроизводится
Посмотрите у себя пожалуйста https://bitbucket.org/d-mozulyov/lockfree/src
...
Рейтинг: 0 / 0
Lock-free: Доведём очередь до ума
    #39555925
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOU,

TestUG падает
...
Рейтинг: 0 / 0
Lock-free: Доведём очередь до ума
    #39555941
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan),

Да еклмн
Где там ошибка?!
...
Рейтинг: 0 / 0
25 сообщений из 147, страница 5 из 6
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Lock-free: Доведём очередь до ума
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]