много потоков и фрагментация памяти
От: Аноним  
Дата: 22.05.07 16:04
Оценка:
Здраствуйте.
при старте программы главный поток начинает создавать потоки, создаёт до лимита потоков. "Вторичные" потоки работают где-то 10-20 сек потом умирают (создаются они через _beginthread()). Первичный поток вечно мониторит потоки, если активных меньше лимина, создаёт еще (если они конечно нужны) и т.д. меня напугали, сказав что моя прога умрёт от фрагметации — правду сказали?

Вообще интересна эта тема, с удовольствием бы прочел ваши мысли доводы, идеи и т.п. в крайнем случаи посоветуйте пожалуйста книгу по данной тематике.

заранее спасибо

24.05.07 10:58: Перенесено модератором из 'C/C++' — Odi$$ey
Re: много потоков и фрагментация памяти
От: Rft  
Дата: 22.05.07 16:22
Оценка:
Здравствуйте, Аноним, Вы писали:

А для чего создавать такое количество потоков?
Фрагментация памяти возникает при выделениях и удалениях памяти, но не совсем понятно какая связь с потоками.
Если же фрагментация памяти действительно вызывает проблемы, то надо писать свой распределитель памяти с учетом
особенностей своей программы.
Например, если программа выделяет память только размером 1 кбайт и 1 мегабайт, то маленькие кусочки должны выделяться
из какого-то пула, например размером 1 мегабайт, если пула не хватает то выделяется еще один блок
размером 1 мегабайт. Таким образом можно уменьшить влияние фрагментации памяти.
Re[2]: много потоков и фрагментация памяти
От: Аноним  
Дата: 22.05.07 16:35
Оценка:
Здравствуйте, Rft, Вы писали:

Rft>А для чего создавать такое количество потоков?

да я изначально так начал делать, потом мне сказали что нужно было создать потоков на старте проги и всё.
Rft>Фрагментация памяти возникает при выделениях и удалениях памяти, но не совсем понятно какая связь с потоками.
я не совсем понимаю как происходит работа с памятью, но я предпологаю что дело обстоит так: создаётся оин поток, ему выделяется стёк, значение регистра стёка уменьшается второй поток занимает стёк "после второго потока" и значения регистра опять уменьшается, потом допустим первый поток удаляется, создайтся третий, но уже (как я предполагаю) "после второго потока (а не перед ним (ведь там память уже освободилась))" — не правильно я себе представляю всё это?

и я наверно не правильно понимаю понятие "фрагментация памяти", дайте пожалуйста верную формулировку этому определению.
Re[3]: много потоков и фрагментация памяти
От: Сергей Мухин Россия  
Дата: 22.05.07 16:59
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Rft, Вы писали:


Rft>>А для чего создавать такое количество потоков?

А>да я изначально так начал делать, потом мне сказали что нужно было создать потоков на старте проги и всё.
Rft>>Фрагментация памяти возникает при выделениях и удалениях памяти, но не совсем понятно какая связь с потоками.
А>я не совсем понимаю как происходит работа с памятью, но я предпологаю что дело обстоит так: создаётся оин поток, ему выделяется стёк, значение регистра стёка уменьшается второй поток занимает стёк "после второго потока" и значения регистра опять уменьшается, потом допустим первый поток удаляется, создайтся третий, но уже (как я предполагаю) "после второго потока (а не перед ним (ведь там память уже освободилась))" — не правильно я себе представляю всё это?

А>и я наверно не правильно понимаю понятие "фрагментация памяти", дайте пожалуйста верную формулировку этому определению.



здесь
---
С уважением,
Сергей Мухин
Re[3]: много потоков и фрагментация памяти
От: Аноним  
Дата: 22.05.07 17:50
Оценка:
Про регистр стека — бред.
Фрагментации памяти изза стека не будет.
Re[4]: много потоков и фрагментация памяти
От: Аноним  
Дата: 22.05.07 18:25
Оценка:
но так как я создаю потоки лучше не делать, лучше при старте создать их и всё?
Re[5]: много потоков и фрагментация памяти
От: Аноним  
Дата: 22.05.07 19:40
Оценка: 1 (1)
А>но так как я создаю потоки лучше не делать, лучше при старте создать их и всё?
Это уже другой вопрос. Создать пул потоков будет блее эффективным решением. Можно сделать свой, можно использовать win32 QueueUserWorkItem
Re[6]: много потоков и фрагментация памяти
От: Аноним  
Дата: 22.05.07 20:31
Оценка:
Здравствуйте, Аноним, Вы писали:

А>>но так как я создаю потоки лучше не делать, лучше при старте создать их и всё?

А>Это уже другой вопрос. Создать пул потоков будет блее эффективным решением. Можно сделать свой, можно использовать win32 QueueUserWorkItem
а что такое пул?
Re[7]: много потоков и фрагментация памяти
От: Аноним  
Дата: 24.05.07 00:35
Оценка:
а что такое пул?
Re[8]: много потоков и фрагментация памяти
От: sof.bix Россия http://byterix.net
Дата: 24.05.07 05:11
Оценка:
Здравствуйте, Аноним, Вы писали:

А>а что такое пул?


пул это заготовленный лист нитей, которые ты будешь отрабатывать (угрожающе написал)

о пулах
Re[8]: много потоков и фрагментация памяти
От: Danchik Украина  
Дата: 24.05.07 08:11
Оценка:
Здравствуйте, Аноним, Вы писали:

А>а что такое пул?


Статья на RSDN: Эффективная многопоточность
Автор(ы): Алексей Ширшов
Дата: 03.08.2003
Статья посвящена системным механизмам, организующим (или помогающим организовать) пул потоков. Рассматриваются базовые, универсальные сервисы, с помощью которых можно реализовывать серверы для любых доступных механизмов взаимодействия сервера и клиента: сокеты, именованные каналы (named pipes), почтовые ящики (mailslots) и проч.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.