pthreads число мьютексов и производительность - PullRequest
1 голос
/ 17 сентября 2010
  • сколько мьютексов pthreads обычно доступно в типичной системе?

  • У многих мьютексов pthreads производительность снижается?

Ответы [ 2 ]

3 голосов
/ 01 апреля 2011

POSIX позволяет внедрять мьютексы как ресурс системного уровня, но такая реализация будет считаться крайне плохим качеством, и я не могу представить, чтобы кто-нибудь использовал его.На самом деле, в современных реализациях (например, Linux) количество мьютексов, которые вы можете иметь, ограничено только виртуальным адресным пространством.(На самом деле у вас может быть даже больше, вплоть до общего размера физической памяти / раздела подкачки плюс размер файловой системы, если вы используете mmap и munmap для их сопоставления при необходимости.)

Что касаетсяПроизводительность: в 32-битных системах glibc разблокировка надежных мьютексов - это операция O(n), где n - это количество надежных мьютексов, которые в данный момент заблокированы.Это связано с использованием односвязного списка, где нужен двусвязный список;им не хватило места в их pthread_mutex_t структуре, чтобы соответствовать обоим указателям.Эта проблема относится только к надежным мьютексам, которые редко используются на практике, и только в 32-битных Linux / glibc.Для всех других типов мьютексов число мьютексов не влияет на производительность.Тем не менее, число мьютексов, на которые претендуют в настоящее время, оказывает некоторое влияние на производительность, но это сложный вопрос, выходящий за рамки простого ответа.

1 голос
/ 18 сентября 2010

Несколько ответов:

  1. Вы задаете неправильный вопрос.Если вам нужно более 1000 мьютексов, вы, вероятно, делаете что-то не так.
  2. Столько, сколько вам нужно.Мьютекс без общего процесса обычно не потребляет никаких ресурсов, кроме оперативной памяти.
  3. Наличие множества неиспользуемых мьютексов снижает производительность точно так же, как и наличие целых чисел;то есть совсем нет (при условии достаточного объема ОЗУ).
...