LINUX.ORG.RU

История изменений

Исправление a--, (текущая версия) :

Там есть очереди между потоками. И я беру, и заменяю очередь на списках на кольцевой буфер. И получаю кратную потерю производительности на ping-тесте

Я так подозреваю, что уж обычные очереди (a-la mailbox) между потоками под обычные нагрузки вылизаны до последней степени (очередь с таймерами, про которые шла речь раньше, я отношу к необычным, т.к. там есть отмена мессаджей).

Не глядя попробую предположить, что у тебя в кольцевом буфере появляется false sharing — то есть разные потоки гоняют строчку кэша по разным ядрам. Подозреваю, что под это уже сделали специальный дизайн деки (для очереди), где каждые 64 байта отдаются только одному ядру.

UPDATE: я имею в виду личный mailbox, т.е. когда много потоков туда пишет, и только один — читает и удаляет. А если читает и удаляет много потоков тоже, то тогда возможно, что нет ничего лучше, чем решение на списках-указателях .

Исправление a--, :

Там есть очереди между потоками. И я беру, и заменяю очередь на списках на кольцевой буфер. И получаю кратную потерю производительности на ping-тесте

Я так подозреваю, что уж обычные очереди (a-la mailbox) между потоками под обычные нагрузки вылизаны до последней степени (очередь с таймерами, про которые шла речь раньше, я отношу к необычным, т.к. там есть отмена мессаджей).

Не глядя попробую предположить, что у тебя в кольцевом буфере появляется false sharing — то есть разные потоки гоняют строчку кэша по разным ядрам. Подозреваю, что под это уже сделали специальный дизайн деки (для очереди), где каждые 64 байта отдаются только одному ядру.

UPDATE: я имею в виду личный mailbox, т.е. когда много потоков туда пишет, и только один — читает и удаляет. А если читает и удаляет много потоков тоже, то тогда возможно что лучше решения на списках-указателях ничего и нет.

Исправление a--, :

Там есть очереди между потоками. И я беру, и заменяю очередь на списках на кольцевой буфер. И получаю кратную потерю производительности на ping-тесте

Я так подозреваю, что уж обычные очереди (a-la mailbox) между потоками под обычные нагрузки вылизаны до последней степени (очередь с таймерами, про которые шла речь раньше, я отношу к необычным, т.к. там есть отмена мессаджей).

Не глядя попробую предположить, что у тебя в кольцевом буфере появляется false sharing — то есть разные потоки гоняют строчку кэша по разным ядрам. Подозреваю, что под это уже сделали специальный дизайн деки (для очереди), где каждые 64 байта отдаются только одному ядру.

Исправление a--, :

Там есть очереди между потоками. И я беру, и заменяю очередь на списках на кольцевой буфер. И получаю кратную потерю производительности на ping-тесте

Я так подозреваю, что уж обычные очереди (a-la mailbox) между потоками под обычные нагрузки вылизаны до последней степени (очередь с таймерами, про которые шла речь раньше, я отношу к необычным, т.к. там есть отмена мессаджей).

Не глядя попробую предположить, что у тебя в кольцевом буфере появляется false sharing — то есть разные потоки гоняют строчку кэша по разным ядрам. Подозреваю, что под это уже сделали специальный дизайн деки, где каждые 64 байта отдаются только одному ядру.

Исправление a--, :

Там есть очереди между потоками. И я беру, и заменяю очередь на списках на кольцевой буфер. И получаю кратную потерю производительности на ping-тесте

Я так подозреваю, что уж обычные очереди (a-la mailbox) между потоками под обычные нагрузки вылизаны до последней степени (очередь с таймером я отношу к необычным, т.к. там есть отмена мессаджей).

Не глядя попробую предположить, что у тебя в кольцевом буфере появляется false sharing — то есть разные потоки гоняют строчку кэша по разным ядрам. Подозреваю, что под это уже сделали специальный дизайн деки, где каждые 64 байта отдаются только одному ядру.

Исходная версия a--, :

Там есть очереди между потоками. И я беру, и заменяю очередь на списках на кольцевой буфер. И получаю кратную потерю производительности на ping-тесте

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

Не глядя попробую предположить, что у тебя в кольцевом буфере появляется false sharing — то есть разные потоки гоняют строчку кэша по разным ядрам. Подозреваю, что под это уже сделали специальный дизайн деки, где каждые 64 байта отдаются только одному ядру.