Клиф Клик (Cliff Click) из компании Azul Systems предложил интересное решение проблемы по обеспечению работы быстрых и надежных блокировок при изменении структур данных в системах с большим количеством процессоров. При числе процессоров превышающих 32 становится неэффективным использование стандартных механизмов блокировки доступа к общим данными из многопоточных программ. Клифу была поставлена задача найти решение данной проблемы для 768-ядерной системы (теоретический порог возможности использования read-write локов - 50-100 CPU).
Суть идеи в изменении стиля кодирования и вовлечения для хранения данных массива большого размера, изменение каждой ячейки которого является атомарной операцией, реализованной путем переключения активной позиции в массиве через логическую репликацию единицы данных, используя алгоритм конечного автомата (с массивом производится операции чтения и инкрементального копирования ячеек при изменении).
В рамках проекта high-scale-lib разработана Java библиотека с реализацией предложенного подхода. Так реализация хэша (java.util.concurrent.ConcurrentHashMap) на 768 ядерной системе позволяет обрабатывать более миллиарда чтений данных в секунду при более 10 миллионов изменений в секунду (подход эффективен когда интенсивность чтения преобладает над изменением).
|