Здраствуйте.
при старте программы главный поток начинает создавать потоки, создаёт до лимита потоков. "Вторичные" потоки работают где-то 10-20 сек потом умирают (создаются они через _beginthread()). Первичный поток вечно мониторит потоки, если активных меньше лимина, создаёт еще (если они конечно нужны) и т.д. меня напугали, сказав что моя прога умрёт от фрагметации — правду сказали?
Вообще интересна эта тема, с удовольствием бы прочел ваши мысли доводы, идеи и т.п. в крайнем случаи посоветуйте пожалуйста книгу по данной тематике.
заранее спасибо
24.05.07 10:58: Перенесено модератором из 'C/C++' — Odi$$ey
А для чего создавать такое количество потоков?
Фрагментация памяти возникает при выделениях и удалениях памяти, но не совсем понятно какая связь с потоками.
Если же фрагментация памяти действительно вызывает проблемы, то надо писать свой распределитель памяти с учетом
особенностей своей программы.
Например, если программа выделяет память только размером 1 кбайт и 1 мегабайт, то маленькие кусочки должны выделяться
из какого-то пула, например размером 1 мегабайт, если пула не хватает то выделяется еще один блок
размером 1 мегабайт. Таким образом можно уменьшить влияние фрагментации памяти.
Re[2]: много потоков и фрагментация памяти
От:
Аноним
Дата:
22.05.07 16:35
Оценка:
Здравствуйте, Rft, Вы писали:
Rft>А для чего создавать такое количество потоков?
да я изначально так начал делать, потом мне сказали что нужно было создать потоков на старте проги и всё. Rft>Фрагментация памяти возникает при выделениях и удалениях памяти, но не совсем понятно какая связь с потоками.
я не совсем понимаю как происходит работа с памятью, но я предпологаю что дело обстоит так: создаётся оин поток, ему выделяется стёк, значение регистра стёка уменьшается второй поток занимает стёк "после второго потока" и значения регистра опять уменьшается, потом допустим первый поток удаляется, создайтся третий, но уже (как я предполагаю) "после второго потока (а не перед ним (ведь там память уже освободилась))" — не правильно я себе представляю всё это?
и я наверно не правильно понимаю понятие "фрагментация памяти", дайте пожалуйста верную формулировку этому определению.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Rft, Вы писали:
Rft>>А для чего создавать такое количество потоков? А>да я изначально так начал делать, потом мне сказали что нужно было создать потоков на старте проги и всё. Rft>>Фрагментация памяти возникает при выделениях и удалениях памяти, но не совсем понятно какая связь с потоками. А>я не совсем понимаю как происходит работа с памятью, но я предпологаю что дело обстоит так: создаётся оин поток, ему выделяется стёк, значение регистра стёка уменьшается второй поток занимает стёк "после второго потока" и значения регистра опять уменьшается, потом допустим первый поток удаляется, создайтся третий, но уже (как я предполагаю) "после второго потока (а не перед ним (ведь там память уже освободилась))" — не правильно я себе представляю всё это?
А>и я наверно не правильно понимаю понятие "фрагментация памяти", дайте пожалуйста верную формулировку этому определению.
А>но так как я создаю потоки лучше не делать, лучше при старте создать их и всё?
Это уже другой вопрос. Создать пул потоков будет блее эффективным решением. Можно сделать свой, можно использовать win32 QueueUserWorkItem
Re[6]: много потоков и фрагментация памяти
От:
Аноним
Дата:
22.05.07 20:31
Оценка:
Здравствуйте, Аноним, Вы писали:
А>>но так как я создаю потоки лучше не делать, лучше при старте создать их и всё? А>Это уже другой вопрос. Создать пул потоков будет блее эффективным решением. Можно сделать свой, можно использовать win32 QueueUserWorkItem
а что такое пул?