Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Производительность и ресурсоемкость мьютексов 
:(
    Опции темы
REZiaMIX
Дата 26.8.2010, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 3.11.2007

Репутация: нет
Всего: 4



Кто что может сказать о производительности мьютексов? Какое максимальное кол-во мьютексов рекомендуется для программы?
Тут написано решение для безопасного удаления клиента из списка, при работе из нескольких потоков. В коде Start используется вызов LockCriticalSection(). Тут вопрос - какую критическую секцию(в линухе мьютекс) блокировать? Блокировать секцию, которая отвечает за синхронизацию доступа ко всему массиву - кажется очень накладно. Делать по мьютексу для каждого клиента?


--------------------
user posted image
PM MAIL   Вверх
REZiaMIX
Дата 26.8.2010, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 3.11.2007

Репутация: нет
Всего: 4



Провел небольшой тест:
Код

Count: 2000000
All mutexes created in 556 ms; 0.000278 ms per mutex
All mutexes locked in 114 ms; 0.000057 ms per mutex
All mutexes unlocked in 102 ms; 0.000051 ms per mutex


Потребление памяти для такого кол-ва маленькое. Выходит: по мьютексу на клиента - не так уже и плохо?


--------------------
user posted image
PM MAIL   Вверх
boostcoder
Дата 26.8.2010, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 16
Всего: 110



REZiaMIX, ты бы еще код показал, и тебе бы цены небыло smile 
PM WWW   Вверх
REZiaMIX
Дата 26.8.2010, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 3.11.2007

Репутация: нет
Всего: 4



Цитата(boostcoder @ 26.8.2010,  12:00)
REZiaMIX, ты бы еще код показал, и тебе бы цены небыло smile

Код

    timers::msTimer timer;
    unsigned long mcount = 2000000;
    std::vector <criticalSection *> sections;

    printf("Count: %i\n",mcount);

    timer.timer();
    for(size_t i=0;i!= mcount;++i)
        sections.push_back(new criticalSection);
    unsigned long time_create = timer.getValue();
    float permutex = float(time_create) / float(mcount);
    printf("All mutexes created in %d ms; %f ms per mutex\n",time_create,permutex);

    timer.timer();
    for(size_t i=0;i!= mcount;++i)
        sections[i]->enter();
    unsigned long time_lock = timer.getValue();
    permutex = float(time_lock) / float(mcount);
    printf("All mutexes locked in %d ms; %f ms per mutex\n",time_lock,permutex);

    timer.timer();
    for(size_t i=0;i!= mcount;++i)
        sections[i]->leave();
    unsigned long time_unlock = timer.getValue();
    permutex = float(time_unlock) / (mcount);
    printf("All mutexes unlocked in %d ms; %f ms per mutex\n",time_unlock,permutex);




Где criticalSection:
Код

criticalSection::criticalSection()
{
    if(pthread_mutex_init(&myMutex, NULL) != 0)
     printf("Mutex creating error!\n");
}
criticalSection::~criticalSection()
{
     pthread_mutex_destroy(&myMutex);
}
void criticalSection::enter()
{
    pthread_mutex_lock(&myMutex);
}
void criticalSection::leave()
{
    pthread_mutex_unlock(&myMutex);
}


Это сообщение отредактировал(а) REZiaMIX - 26.8.2010, 12:14


--------------------
user posted image
PM MAIL   Вверх
xvr
Дата 26.8.2010, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 20
Всего: 223



Цитата(REZiaMIX @  26.8.2010,  09:43 Найти цитируемый пост)
Блокировать секцию, которая отвечает за синхронизацию доступа ко всему массиву - кажется очень накладно. 
Это зависит от частоты удаления и добавления новых клиентов. Если это происходит не очень часто, то можно блокировать весь массив.

Цитата(REZiaMIX @  26.8.2010,  09:43 Найти цитируемый пост)
Делать по мьютексу для каждого клиента?
Собственно сам мьютекс занимает места немного, но он создает объект в ядре - а там место может и закончится. Надо смотреть в ядро.



PM MAIL   Вверх
REZiaMIX
Дата 26.8.2010, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 3.11.2007

Репутация: нет
Всего: 4



Цитата(xvr @ 26.8.2010,  12:34)
Собственно сам мьютекс занимает места немного, но он создает объект в ядре - а там место может и закончится. Надо смотреть в ядро.

Ну если памяти хватает на 2 миллиона, то думаю даже 100 тысяч незначительны. Тут вопрос - может можно сделать более красиво?


--------------------
user posted image
PM MAIL   Вверх
MAKCim
Дата 26.8.2010, 23:36 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(xvr @  26.8.2010,  12:34 Найти цитируемый пост)
Собственно сам мьютекс занимает места немного, но он создает объект в ядре 

если речь идет про pthread_mutex_t, то объекта ядра нет


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.1209 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.