Я занимаюсь научными исследованиями, пытаясь разработать инструмент программирования, который помогает реализовать мелкозернистые функции блокировки для параллельных программ, которые поддерживают древовидные структуры данных.Примеры кода, в которых используются мелкозернистые замки (JCR Jackrabbit?)
Например, программист может написать некоторые функции, которые получают корневой узел дерева и модифицируют дерево (путем перемещения по некоторым маршрутам и добавления/удаления узлов), а инструмент поможет ему найти, где в кодовых узлах должны быть заблокированы и где они могут быть освобождены - поэтому функции могут выполняться одновременно на одном и том же дереве.
Я ищу примеры реальных примеров кода, в которых используется такая мелкозернистая блокировка, или где она может быть использована для повышения производительности, но программист был слишком ленив для ее реализации (например, он заблокировал все дерево во время вызова функции без освобождения бесполезных узлов).
Я читал о JCR & Jackrabbit, которые используют базу данных древовидные, и нашел статью, в которой описывается, как блокировать узлы в JCR (но без примеров): http://www.day.com/specs/jcr/2.0/17_Locking.html
У меня есть очень небольшой опыт работы в базы данных, и я не совсем понимаю, что разрешено, и что не допускается, когда речь заходит о базах данных и параллелизма в Jackrabbit. Доступ к одному узлу из 2 потоков не разрешен, но как насчет разных репозиториев? И что произойдет, если два разных клиента попытаются получить доступ к одному и тому же узлу (например, один пытается удалить его, а другой пытается его изменить) будет ли session.save() сбой?).
Спасибо, Орен
Вы также можете ознакомиться на форумах Adobe для CQ5 (http://forums.adobe.com/community/digital_marketing_suite/cq5). Реализация CQ5 JCR, известного как CRX, является коммерческой версией Apache Jackrabbit. –
Вы хотите остаться в сфере JCR? Вы открыты для других технологий? –
Сообщество Clojure много думает о параллелизме, которое было одним из его драйверов. См. Http://clojure.org/concurrent_programming - и во многих случаях предполагает, что на практике программисты разрабатывают более совершенные программы, если они явно не используют блокировки. Вот почему Clojure предлагает подходы, значительно отличающиеся от традиционной блокировки Java. Если вы открыты для этого, мы можем найти множество примеров кода Clojure. –