POSIX 线程创建数量测试
来源:互联网 发布:模拟退火算法matlab 编辑:程序博客网 时间:2024/05/29 02:56
每个线程都有自己的栈空间,用ulimit 可以查看系统的默认栈大小。
Linux创建线程数有最大的限制:
cat /proc/sys/kernel/threads-max 可以查看最大线程数。这个线程数是所有进程的线程数和。
[wenjie@localhost ~]$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 7932
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 1024
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
创建线程时,可以指定这个线程的栈大小
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine) (void *), void *arg);
也可以用ulimit 命令更改
如: ulimit -s 16384
Linux有最小的栈要求,PTHREAD_STACK_MIN 默认为 16K
下面的代码,可以让你查看当前能创建的线程数,以及最后一个线程创建失败的原因。
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
void * entry(void *arg)
{
int num = *(int*)(arg);
while(1) {
sleep(1);
}
}
int main(int argc, char *argv[])
{
for (int i = 0; i < atoi(argv[1]); ++i) {
pthread_attr_t *attr = (pthread_attr_t*)malloc(sizeof(pthread_attr_t));
pthread_attr_init(attr);
int ret = pthread_attr_setstacksize(attr, 16384); // 24KB
if (ret != 0) {
perror("pthread_attr_setstacksize error.");
break;
}
pthread_t pth;
ret = pthread_create(&pth, attr, entry, &i);
if (ret != 0) {
printf("pthread_create error. has created conut = %d, error=%s\n", i, strerror(errno));
break;
}
}
while(1) {
sleep(10);
}
return 0;
}
- POSIX 线程创建数量测试
- posix方式创建新线程
- POSIX线程的创建和取消
- POSIX定时器-线程方式创建定时器
- Posix线程编程指南(1)---线程创建与取消
- Posix线程编程指南(1)---线程创建与取消
- Posix线程编程指南(1)--线程创建与取消
- POSIX 线程详解(2-线程创建和销毁)
- Posix 线程
- Posix线程
- POSIX线程
- POSIX 线程
- POSIX线程
- POSIX线程
- POSIX线程
- posix线程
- POSIX线程
- POSIX线程
- PAT A 1047.Student List for Course (25)
- 蜗牛—JavaScript学习之简易树形菜单
- java设计模式(一) 单例模式
- CopyOnWriteArrayList中的set方法随记
- Android自定义View的实现方法,带你一步步深入了解View(四)
- POSIX 线程创建数量测试
- Android LayoutInflater原理分析,带你一步步深入了解View(一)
- 共享内存区
- 提高java性能的一些技巧
- Tomcat manager登录失败——401 Unauthorized错误
- 十二周工作周报
- 阿姆达尔定律和Gustafson law
- struts2流程原理
- 蜗牛—JavaScript学习之表单验证