Я хотел бы, чтобы вы могли объяснить мне простым способом, как работает скороговорка. Эта концепция была неуловима для меня, как известно.
Возможно, с вашей помощью я мог бы понять это.
java
design-patterns
multithreading
real-time
chrisapotek
источник
источник
Ответы:
В Fowler статье поставщики хороший праймер, и это объяснение:
Более традиционный подход может использовать Очередь Производителя и Очередь Потребителя, каждый из которых использует блокировки в качестве механизмов параллелизма. На практике, что происходит с очередями производителя и потребителя, так это то, что очереди либо полностью пусты, либо полностью заполнены большую часть времени, что приводит к конфликту блокировок и потере тактов. Разрушитель облегчает это, в частности, благодаря тому, что все производители и потребители используют один и тот же механизм очереди, координируя друг с другом, наблюдая за счетчиками последовательности, а не используя механизмы блокировки.
источник
Из этой статьи о CoralQueue :
Таким образом, производители и потребители не наступают друг на друга в круговом массиве , проверяя их соответствующие последовательности . И чтобы сообщать свои последовательности взад-вперед друг другу, они используют барьеры памяти вместо замков. Это самый быстрый способ без блокировки, с которым они могут общаться.
К счастью, вам не нужно вдаваться в подробности шаблона разрушения, чтобы использовать его. Помимо реализации LMAX, существует CoralQueue, разработанный Coral Blocks, с которым я связан. Некоторым людям легче понять концепцию, читая код, поэтому ниже приведен простой пример того, как один производитель отправляет сообщения одному потребителю. Вы также можете проверить этот вопрос на примере демультиплексора (один производитель для многих потребителей).
Отказ от ответственности: я один из разработчиков CoralQueue.
источник