История изменений
Исправление 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 байта отдаются только одному ядру.