Синхронизация потоков замедляет многопоточное приложение - PullRequest
0 голосов
/ 27 апреля 2010

У меня есть многопоточное приложение, написанное на c #. Я заметил, что реализация синхронизации потоков с помощью метода lock (this) замедляет приложение на 20%. Это ожидаемое поведение или я должен рассмотреть реализацию ближе?

Ответы [ 4 ]

2 голосов
/ 27 апреля 2010

Блокировка добавляет некоторые накладные расходы, которых нельзя избежать. Также очень вероятно, что некоторые из ваших потоков теперь будут ожидать освобождения ресурсов, а не просто захватывать их, когда захотят. Если вы правильно реализовали синхронизацию потоков, то это хорошо.

Но в целом на ваш вопрос невозможно ответить без глубоких знаний о приложении. Замедление на 20% может быть в порядке, но вы можете блокировать слишком широко, и тогда программа (в целом) будет медленнее.

Также, пожалуйста, не используйте блокировку (это). Если ваш экземпляр передается, и кто-то еще блокирует ссылку, у вас будет тупик. Рекомендуется блокировать закрытый объект, к которому никто другой не может получить доступ.

0 голосов
/ 27 апреля 2010

Есть счетчики производительности , которые вы можете отслеживать в Windows, чтобы узнать, сколько времени ваше приложение тратит на борьбу за блокировки.

0 голосов
/ 27 апреля 2010

Любая синхронизация замедлит многопоточность.

Как говорится, lock(this) действительно никогда не бывает хорошей идеей. Вы всегда должны блокировать закрытый объект, используемый только для синхронизации, когда это возможно.

Убедитесь, что ваша блокировка сведена к минимуму, и удерживайте блокировку как можно быстрее Это поможет свести «замедление» к минимуму.

0 голосов
/ 27 апреля 2010

В зависимости от того, насколько грубыми или детальными являются ваши операторы lock (), вы действительно можете повлиять на производительность вашего приложения MT. Только запертые вещи, которые вы действительно знаете, должны быть заперты.

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