Несколько техник, которые могут помочь минимизировать время блокировки в многопоточных приложениях:
- Делать блокировку ближе к концу транзакции. 1 Например, сначала выполнить расчёты и проверки, а блокировку наложить уже в самом конце. 1
- Использовать режим разделения итогов. 1 Он помогает писать в регистр параллельно, даже если данные пересекаются. 1
- Разбивать по времени длительные операции. 1 Например, разбить по времени проведение документов, чтобы избежать ожиданий на блокировках. 1
- Делать максимально короткие транзакции. 1 Выносить проверки и расчёты за пределы транзакции, а любую запись и наложение блокировок делать в самом конце. 1
- Избегать использования блокировок и вместо этого использовать передачу сообщений. 4 Это современный подход к совместному использованию данных в многопоточных средах. 4
- Использовать потокобезопасную очередь. 3 В неё кладут функциональный объект, а в это время в рабочем потоке крутится бесконечный цикл, который на каждой итерации обращается к очереди, достаёт из неё переданный код и выполняет его. 3