Вопрос по синхронизации - PullRequest
4 голосов
/ 02 июня 2010

Использование синхронизации замедляет выполнение программы. Есть ли способ улучшить скорость выполнения?

Ответы [ 5 ]

7 голосов
/ 02 июня 2010

Сказать, что конструкция синхронизации замедляет выполнение, все равно, что сказать, что парашют замедляет парашютиста. Обойтись без будет быстрее, но это не совсем так. Синхронизация служит цели.

Чтобы повысить скорость выполнения, просто правильно примените синхронизацию.

Например, использование шаблона проектирования Producer / Consumer может помочь вам уменьшить количество конструкций синхронизации, требуемых в вашем коде.

1 голос
/ 02 июня 2010

Это просто неправда, что «синхронизация замедляет работу программ» - это происходит только тогда, когда синхронизированные действия выполняются очень часто, или когда на самом деле за них борется множество потоков. Для большинства приложений ни то, ни другое не верно.

Кроме того, некоторые виды параллельных операций могут быть безопасно реализованы без синхронизации с использованием умных структур данных или аппаратных примитивов. Примеры:

0 голосов
/ 02 июня 2010

Возможно, вы захотите синхронизировать блок кода, а не весь метод. Без этого вы рискуете намного больше!

0 голосов
/ 02 июня 2010
  • Профилируйте свой код, узнайте, где находятся настоящие узкие места.
  • Тщательно повторно проанализируйте ваши критические регионы. Очень легко применить синхронизацию слишком широко.
  • Иногда изменение алгоритма может привести к совершенно другому профилю синхронизации. Это не всегда имеет положительный эффект!
0 голосов
/ 02 июня 2010

Вы измерили, насколько (если есть) замедление?

Ранние JVM подвергались штрафу при использовании синхронизации. Однако за эти годы ситуация улучшилась значительно . Я не стал бы беспокоиться о снижении производительности при синхронизации. Будет еще много кандидатов на оптимизацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...