Работа с БД: перед тем как писать или читать данные, надо их монополизировать.
Объектно-ориентированный подход: объекты состоят из команд и данных. Внутри себя объект строго последователен. Если нужны данные другого объекта, можно послать ему сообщение. Тот вернёт соответствующее значение. У каждого объекта есть очередь входных сообщений. Каждое сообщение обрабатывается отдельно. Не возникает проблем с одновременным чтением/записью.
Посылка сообщения не менее, а может быть и более дорогое действие, чем свёртка/развёртка процесса. Это приводит к толкотне процессов.
Можно придумать распределение задач по объектам в конвейерном стиле.
Есть таблица маршрутизации: чтобы понять, сколько цифр будет набирать абонент. Потом определяется, локальный абонент или междугородний, или международный. Ищется маршрут к вызываемому абоненту. Проверяется, занят ли он. Потом соединение.
Удаётся выстроить критичные объекты, сделать так, чтобы они как можно дольше работали со своими локальными данными.
Итог:
1. Нет глобальной БД, есть ОО способ для обеспечения замены данных на лету
2. Все свойства и значения получаем через мессаги
3. Устраиваем конвейер.