Как предположили некоторые другие («яблоки и апельсины»), я считаю эти две техники ортогональными.Основное предположение здесь, по-видимому, состоит в том, что один из них выберет один или другой: мы будем использовать блокировку и общие ресурсы или , мы будем использовать передачу сообщений, и что один делает другой ненужным, или, возможно,другое даже недоступно.
Так же, как, скажем, мета-круговой оценщик, неясно, какие здесь настоящие примитивы.Например, для реализации передачи сообщений вам, вероятно, понадобится атомарная CAS и определенная семантика видимости памяти, или, возможно, некоторое состояние блокировки и общего доступа.Можно реализовать атомарные операции в терминах блокировок, или можно реализовать блокировки в терминах атомарных операций (как это делает Java в ее java.util.concurrent.locks
типах).
Аналогично, хотя, по общему признанию, это растяжениеможно реализовать блокировку с передачей сообщений.Спрашивать, какой из них работает лучше, не имеет особого смысла в целом, потому что на самом деле это больше вопрос о том, какие из них построены.Скорее всего, тот, кто находится на более низком уровне , может лучше управлять способным программистом, чем тот, который построен на вершине - как это было с автомобилями с механической коробкой передач до недавнего времени (там тоже были споры).
Обычно подход с передачей сообщений хвалят не для лучшей производительности, а скорее для безопасности и удобства, и он обычно продается, отказывая программисту в управлении блокировкой и общими ресурсами.В результате он делает ставку на возможности программиста;если программист не может получить блокировку, он не может сделать это плохо и замедлить программу.Подобно дебатам, касающимся ручного управления памятью и сбора мусора, некоторые будут претендовать на звание «хороших водителей», максимально использующих ручное управление;другие, особенно те, кто внедряет и продвигает использование сборщика мусора, будут утверждать, что в совокупности сборщик может выполнять работу лучше, чем «не очень хорошие водители» с ручным управлением.
Нет абсолютногоответ.Разница здесь будет заключаться в уровне квалификации программистов, а не в инструментах, которыми они могут владеть.