Pthreads - 高内存使用率

NeD*_*ark 8 c linux multithreading pthreads memory-efficient

我在C语言编程,在256Mb系统上在Linux中创建了很多Pthreads.我通常免费+ 200Mb.

当我使用少量线程运行程序时,它可以工作,但是一旦我创建了大约100个线程,它就会出错,因为系统内存不足.我做了几次测试,每个线程使用了近2Mb.线程的堆栈大小设置为16Kb.

我用来创建每个线程的代码:

pthread_attr_t attr;
pthread_attr_init(&attr);
size_t stacksize;
stacksize = (double) 16*1024;
int res = pthread_attr_setstacksize (&attr, stacksize);
int res2 = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
if (res != 0 || res2 != 0) {
    logs << "pthread_attr_XX: error "+int2string(res);
    exit(-1);
}
pthread_t id;
pthread_create(&id, &attr, &Class::thread_callback, &some_var);
Run Code Online (Sandbox Code Playgroud)

这是正常的还是我错过了什么?谢谢.

gby*_*gby 4

不确定它是否有帮助,但在创建第一个线程之前尝试调用setrlimitwithRLIMIT_STACK将堆栈大小限制为 16k。

  • 16 kb 可能太小,因此也应该尝试 `ulimit -s 40` 和 `ulimit -s 70`。 (2认同)
  • @osgx:您建议的命令成功了,谢谢。我没有尝试使用 setrlimit,但我想它也会起作用,因为它基于相同的。现在我可以打开很多内存使用率较低的线程。看起来 pthread_attr_setstacksize 没有按预期工作,需要更改全局限制 (2认同)