Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Кольцевой буфер или TObjectQueue  [new]
cptngrb
Member

Откуда:
Сообщений: 229
Я использую для передачи данных между потоками буфер в виде TObjectQueue с критическими секциями (важен порядок обработки), но мне не очень нравиться задержки в ожидании, когда потоков становиться более 50. На страницах интернета внезапно узнал, что есть lock-free решение в виде кольцевого буфера.
[url=]http://forum.vingrad.ru/forum/topic-60076/anchor-entry480469/15.html[/url]
Но у меня есть одно ограничение - буфер должен уметь расти, если потоки-читатели не успевают за потоками-писателями. Т.е. я не могу указать размер буфера.
А при решении с очередями происходит тоже не очень хорошие вещи при увеличении Capacity

А может вместо критических секций использовать события? Что посоветуете?
7 ноя 18, 17:41    [21727187]     Ответить | Цитировать Сообщить модератору
 Re: Кольцевой буфер или TObjectQueue  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 46152

cptngrb
А может вместо критических секций использовать события? Что посоветуете?

Я бы посоветовал покопаться в коде этого куя и найти откуда берутся задержки в ожидании. У
хорошего куя задержкам взяться практически неоткуда, ибо критическая секция берётся на
считанную пару команд процессора.

Posted via ActualForum NNTP Server 1.5

7 ноя 18, 18:01    [21727201]     Ответить | Цитировать Сообщить модератору
 Re: Кольцевой буфер или TObjectQueue  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 3862
Если есть неконтролируемый рост, значит следует не буфер увеличивать, а сделать приостановку работы -- чтобы "писатели" немного притормозились и перестали кашу варить, пока предыдущие данные не обработаются и учередь не освободится.
7 ноя 18, 18:07    [21727205]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить