|
|
|
Кольцевой буфер или TObjectQueue
|
|||
|---|---|---|---|
|
#18+
Я использую для передачи данных между потоками буфер в виде TObjectQueue с критическими секциями (важен порядок обработки), но мне не очень нравиться задержки в ожидании, когда потоков становиться более 50. На страницах интернета внезапно узнал, что есть lock-free решение в виде кольцевого буфера. http://forum.vingrad.ru/forum/topic-60076/anchor-entry480469/15.html Но у меня есть одно ограничение - буфер должен уметь расти, если потоки-читатели не успевают за потоками-писателями. Т.е. я не могу указать размер буфера. А при решении с очередями происходит тоже не очень хорошие вещи при увеличении Capacity А может вместо критических секций использовать события? Что посоветуете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2018, 17:41 |
|
||
|
Кольцевой буфер или TObjectQueue
|
|||
|---|---|---|---|
|
#18+
cptngrbА может вместо критических секций использовать события? Что посоветуете? Я бы посоветовал покопаться в коде этого куя и найти откуда берутся задержки в ожидании. У хорошего куя задержкам взяться практически неоткуда, ибо критическая секция берётся на считанную пару команд процессора. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2018, 18:01 |
|
||
|
Кольцевой буфер или TObjectQueue
|
|||
|---|---|---|---|
|
#18+
Если есть неконтролируемый рост, значит следует не буфер увеличивать, а сделать приостановку работы -- чтобы "писатели" немного притормозились и перестали кашу варить, пока предыдущие данные не обработаются и учередь не освободится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2018, 18:07 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39729492&tid=2040156]: |
0ms |
get settings: |
7ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
53ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
| others: | 203ms |
| total: | 361ms |

| 0 / 0 |
