
On Mon, 2007-10-22 at 09:51 +0100, Apostolos Apostolidis wrote:
Hi all. I have developed some code allowing a thread group of 500 threads to run. However, as soon as the 381st thread is spawned, I get the following runtime error :
terminate called after throwing an instance of 'boost::thread_resource_error' what(): boost::thread_resource_error
That's a lot of threads. For both win32 threading and Posix pthreads I have an idea each thread consumes at least a megabyte of address space and who knows what other limited resources. How much memory do you have ? Generally you want to structure your apps so that there is some reasonable number of active "compute" threads (where "reasonable" is some number not much higher than the number of CPU cores you have) and so that the number of "I/O threads" (anything expected to make a blocking call on an external service or device) is kept under control too. Tools you might use to do this include mutex-protected queues of work items being fed to the compute threads, and boost::asio. Spawning 100s of threads is a fun thing to do, but it's not a very efficient use of resources, and the OSes aren't really expecting anyone to do it. Have fun Tim [Of course, if you are actually developing on some monster machine with 100s of cores, please ignore the above!]