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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> boost thread есть много памяти 
:(
    Опции темы
admsasha
Дата 27.7.2011, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Есть небольшой код
Код

#include <boost/thread/thread.hpp>
#include <boost/thread/mutex.hpp>

using namespace std;

void startThreadClient(int value){
    return;
}

int main(int argc, char ** argv){
    boost::thread_group thrds;

    for (int i=0;i<200;i++){
        thrds.create_thread(boost::bind(&startThreadClient,0));
    }
    sleep(10000);
    return 0;
}



собираю так
Код

g++ ./testThread.cpp -lboost_thread-mt -o testThread 



Запускаю, смотрю top
5860 myuser      20   0 1604m 1896  872 S    0  0.0   0:00.00 1.6g testThread


Почему так много памяти съедается ? Ну ладно съедается, но почему не освобождается, ведь в потоках ничего не делается, сразу return.

-------
OS: linux mandriva
kernel: 2.6.29.1-server-4mnb
libboost: 1.38
gcc: 4.3.2

PM MAIL WWW ICQ Jabber   Вверх
boostcoder
Дата 27.7.2011, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



для 200 потоков это не много.
но вот зачем вам 200 потоков?! smile
рассказывайте задачу.

boost.thread - всего лишь обертка над pthreads. никакого оверхеда он не вносит.
PM WWW   Вверх
admsasha
Дата 27.7.2011, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вообще есть проект который берет из базы данные и производит над ними действия. Т.к. время на один просчет тратиться не малое  и таких расчетов не мало, хотел провести расчеты в потоках. 

Т.к. с потоками еще не связывался, написал вот такой пример. И очень был удивлен. Тот же самый пример под windows занимает в памяти 3500KB когда потоки запущены и  1000KB когда все потоки закончили свою деятельность (ставил в startThreadClient sleep). Не может быть, что в windows с этим лучше  smile 

200 взято от балды, проверить как будет работать.

Это сообщение отредактировал(а) admsasha - 27.7.2011, 11:26
PM MAIL WWW ICQ Jabber   Вверх
boostcoder
Дата 27.7.2011, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



у меня виртуальной памяти тоже резервируется 1600мб. но реальной - 0мб. так и должно быть. это первое.
второе - sleep нужно вставлять в функцию потока, т.к. в текущем исполнении потоки завершаются сразу после создания.
третье - программам мониторам никогда не верил. они постоянно какой-то бред показывают smile

Добавлено через 3 минуты и 23 секунды
и перестань использовать boost::thread_group там, где периодически создаешь потоки.
скажи версию boost`а.
PM WWW   Вверх
admsasha
Дата 27.7.2011, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(boostcoder @  27.7.2011,  18:31 Найти цитируемый пост)
у меня виртуальной памяти тоже резервируется 1600мб. но реальной - 0мб. так и должно быть. это первое.
 Кстати, не заметил, что это виртуальная память. Последнее число это swap. Но разве это нормально ?


Цитата(boostcoder @  27.7.2011,  18:31 Найти цитируемый пост)
второе - sleep нужно вставлять в функцию потока, т.к. в текущем исполнении потоки завершаются сразу после создания.
 Так и задумывалось. Собственно в чем вопрос и есть. Потоки закончили работать, а память скушана.

Цитата(boostcoder @  27.7.2011,  18:31 Найти цитируемый пост)
третье - программам мониторам никогда не верил. они постоянно какой-то бред показывают
 А кому верить можно ? smile


PM MAIL WWW ICQ Jabber   Вверх
boostcoder
Дата 27.7.2011, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Цитата(admsasha @  27.7.2011,  11:25 Найти цитируемый пост)
Т.к. время на один просчет тратиться не малое  и таких расчетов не мало, хотел провести расчеты в потоках. 

а у тебя реально 200 ядер? smile "хачу такуюжа!" ©

Цитата(admsasha @  27.7.2011,  11:25 Найти цитируемый пост)
Тот же самый пример под windows занимает в памяти 3500KB когда потоки запущены и  1000KB когда все потоки закончили свою деятельность

а разве вендус отображает объем резервированного виртуального адресного пространства?  smile

Добавлено через 2 минуты и 42 секунды
Цитата(admsasha @  27.7.2011,  11:35 Найти цитируемый пост)
Последнее число это swap. Но разве это нормально ?

покажи скрин консоли.

Цитата(admsasha @  27.7.2011,  11:35 Найти цитируемый пост)
Потоки закончили работать, а память скушана.

это не память!

Цитата(admsasha @  27.7.2011,  11:35 Найти цитируемый пост)
А кому верить можно ?

профайлеру smile
PM WWW   Вверх
admsasha
Дата 27.7.2011, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(boostcoder @  27.7.2011,  18:37 Найти цитируемый пост)
а у тебя реально 200 ядер?
 Я же написал, что 200 вставил от балды. Для пробы. Там 99% времени занимает ожидание отклика от внешних устройств (~500 железок) Так что кол-во ядер, я думаю, не причем.

Цитата(boostcoder @  27.7.2011,  18:37 Найти цитируемый пост)
а разве вендус отображает объем резервированного виртуального адресного пространства?
 колонка в "диспетчер задач windows", которая "Объем виртуальной памяти" это не то ?

PM MAIL WWW ICQ Jabber   Вверх
boostcoder
Дата 27.7.2011, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



нет у меня венды. но насколько я помню, в каких-то вендах давненько такого еще не было..
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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