Linux 怎么增大可以c 创建线程的最大线程数

本帖子已过去太久远了,不再提供回复功能。21:12 提问
Linux pthread_create多线程创建耗时不同?
用多线程来同时处理一副图像的卷积,以达到并行加速的效果,运行环境是NanoPC T2的安卓开发板,arm v7 cpu
pthread create(不知道为什么打下划线会自动斜体,函数是有下划线的)
pthread join
建立thread id为从0到NUM的多个线程,然后在每个线程中,分别从这幅图像的第0个,第1个,第2个。。。开始卷积运算,相当于把这幅图像逐个分配到NUM个线程中去计算,最后汇总
for(int i=0; i
param-&thread_tid =
CHECK(!pthread_create(&thread_[i], &attr, im2col_cpu_pthread,(void*)param)) && "Pthread execution failed.";
sem_wait(&thread_sem);
for(int i=0; i&THREAD_NUM; i++)
CHECK(!pthread_join(thread_[i], NULL)) && "Pthread joining failed.";
其中im2col_cpu_pthread是多线程函数入口,是并行卷积的主要对象
此外,由于一次程序每一次输入不止一张图像,所以会在循环中多次调用以上函数,也就是多次create和join
图像卷积的结果是正确的,我分别对28*28单通道图,32*32的三通道图,256*256的三通道图进行了测试,后两个的加速效果分别为20%和30%左右,但是28*28的单通道图反而变慢了,我觉得是在arm下CPU创建线程耗时太多?我用gettimeofday粗略打印了处理28*28图像时创建线程的时间,部分结果如下:
The thread 0's creation costs 75 time.
The thread 1's creation costs 937 time.
The thread 2's creation costs 63 time.
The thread 3's creation costs 62 time.
The thread 0's creation costs 75 time.
The thread 1's creation costs 933 time.
The thread 2's creation costs 62 time.
The thread 3's creation costs 62 time.
The thread 0's creation costs 80 time.
The thread 1's creation costs 896 time.
The thread 2's creation costs 64 time.
The thread 3's creation costs 63 time.
The thread 0's creation costs 75 time.
The thread 1's creation costs 937 time.
The thread 2's creation costs 65 time.
The thread 3's creation costs 63 time.
The thread 0's creation costs 75 time.
The thread 1's creation costs 933 time.
The thread 2's creation costs 64 time.
The thread 3's creation costs 64 time.
而对于28*28的每一个线程的卷积时间也就是200左右(单位相同),四个线程(NUM = 4)加起来900左右,所以可以看出线程创建中每一张图都有一个线程占用了相当于总处理时间的时间,32*32*3和256*256*3的线程创建时间也和28*28*1时间相同,但是占比没有这么大。
为什么会在同一张图像的多线程创建时有一个线程耗时这么大?是我的代码问题吗?怎么解决呢?求点拨,暂时能想到的描述就这么多了,如果还需要补充我再添加,更新了一下,发现线程创建时间那里丢了两个。。
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
丰衣足食, 积分 586, 距离下一级还需 414 积分
论坛徽章:0
创建一个新进程, 测试系统上最大线程数限制(结果见 表一 ), 但是有下面几处不明白:
1. 线程栈大小在:[128KB,&&16392KB] 区间内时,
& && & 该进程内所有线程占用&栈&内存平均在 3G 左右. 而我机器只有1G 物理内存(无交换分区).
2. 线程栈大小在:128KB, 64KB, 32KB之间由大到小变化时,
& && & 该进程内所有线程占用&栈&内存也会变化? 按理说 (ThreadStackSize * MaxThreads) 大体应为物理空间的常数倍.
哪位大牛指点指点迷津 ?& &&&( 后面有相关信息 )& &&&
ThreadStackSize(KiloBytes)&&MaxThreads&&(ThreadStackSize * MaxThreads)& &Error Info( exceeded MaxThreads )
--------------------------------------------------------------------------------------------------------------& && && && && && &
& &&&0& && && && && && && & 1018& && && && && && && && && &0& && && && & Resource temporarily unavailable
16392& && && && && && && &&&189& && && && && && && &3098088& && && && & Resource temporarily unavailable
&&8192& && && && && && && &&&381& && && && && && && &3121152& && && && & Resource temporarily unavailable
&&4096& && && && && && && &&&764& && && && && && && &3129344& && && && & Resource temporarily unavailable
&&2048& && && && && && && & 1529& && && && && && && &3131392& && && && & Resource temporarily unavailable
&&1024& && && && && && && & 3054& && && && && && && &3127296& && && && & Resource temporarily unavailable
& &512& && && && && && && & 6086& && && && && && && &3116032& && && && & Resource temporarily unavailable
& &256& && && && && && && &12082& && && && && && && &3092992& && && && & Resource temporarily unavailable
& &128& && && && && && && &23782& && && && && && && &3044096& && && && & Resource temporarily unavailable
& & 64& && && && && && && &32296& && && && && && && &2066944& && && && & Cannot allocate memory& && && && &
& & 32& && && && && && && &32296& && && && && && && &1033472& && && && & Cannot allocate memory
--------------------------------------------------------------------------------------------------------------
& & StackSize 为 0 意味着没有限制栈大小( ulimit -s unlimited )
其他相关信息:
==============================================================================================================&&
& && &CPU: Intel(R) Core(TM)2 Duo CPU& &&&T7250&&@ 2.00GHz
& &&&显卡: NVidia Corporation Quadro NVS 135M
& &&&内存:& && &
& &&&Fedora 10 系统
& &&&Linux 2.6.29.2 内核
& &&&无交换分区( swap )
& &&&glibc-2.9-3.i686 ( NPTL 2.9 )
1. 操作系统限制的进程默认栈大小, 使用下面命令设定:
& && &# ulimit -s $StackSize
3. 单个进程可创建线程数限制为:
& && &( 由系统变量 _SC_THREAD_THREADS_MAX 决定 ,调用函数 long sysconf( _SC_THREAD_THREADS_MAX)&&)
4. 内存信息:
alex@localhost:~$ cat /proc/meminfo
MemTotal:& && &&&1033192 kB
MemFree:& && && & 537072 kB
Buffers:& && && &&&47744 kB
Cached:& && && &&&270812 kB
SwapCached:& && && && &0 kB
Active:& && && &&&217240 kB
Inactive:& && && &239652 kB
Active(anon):& &&&135268 kB
Inactive(anon):& &&&7140 kB
Active(file):& && &81972 kB
Inactive(file):& &232512 kB
Unevictable:& && && & 12 kB
Mlocked:& && && && &&&12 kB
HighTotal:& && &&&137584 kB
HighFree:& && && && &268 kB
LowTotal:& && && &895608 kB
LowFree:& && && & 536804 kB
SwapTotal:& && && && & 0 kB
SwapFree:& && && && &&&0 kB
Dirty:& && && && && &156 kB
Writeback:& && && && & 0 kB
AnonPages:& && &&&138448 kB
Mapped:& && && && &56868 kB
Slab:& && && && &&&20848 kB
SReclaimable:& && &12084 kB
SUnreclaim:& && && &8764 kB
PageTables:& && && &3976 kB
NFS_Unstable:& && && & 0 kB
Bounce:& && && && && & 0 kB
WritebackTmp:& && && & 0 kB
CommitLimit:& && &516596 kB
Committed_AS:& &&&425756 kB
VmallocTotal:& &&&122880 kB
VmallocUsed:& && & 41956 kB
VmallocChunk:& && &72692 kB
DirectMap4k:& && & 98296 kB
DirectMap4M:& && &811008 kB
5. 测试代码:
============================================================================
Name& && &&&: Hpthread.c
Author& && &: Alex
Version& &&&: 1.0
Copyright& &: GPLv 2
Description : Max threads test case, Ansi-style
============================================================================
#include &unistd.h&
#include &sys/types.h&
#include &sys/resource.h&
#include &pthread.h&
#include &stdlib.h&
#include &stdio.h&
#include &err.h&
void *start_routine(void *);
int main(void) {
& && &&&int j = 0;
& && &&&pthread_
& & & & printf(&THREADS_MAX:%u\n&, sysconf(_SC_THREAD_THREADS_MAX));
& && &&&do{
& && && & printf(&%5uth&&THREAD CREATED\n&, j++);
& & & & if(pthread_create(&tid, NULL, start_routine, NULL))
& & & & & & & & err(-1, &ERROR pthread_create() :&);
& & & & while(j);
& & & & return EXIT_SUCCESS;
void *start_routine(void *a){
& & & & & & & & sleep(1000);
& & & & return NULL;
[ 本帖最后由 leadsino 于
10:17 编辑 ]
丰衣足食, 积分 586, 距离下一级还需 414 积分
论坛徽章:0
传说这里高手如云, 难道没有一个大牛可以搞定 ?
白手起家, 积分 5, 距离下一级还需 195 积分
论坛徽章:0
小富即安, 积分 2651, 距离下一级还需 2349 积分
论坛徽章:0
3. 单个进程可创建线程数限制为:
& && &( 由系统变量 _SC_THREAD_THREADS_MAX 决定 ,调用函数 long sysconf( _SC_THREAD_THREADS_MAX)&&)
这个只是理论值,实际上不可能达这么多,没个线程在内核中都要占用一定的内存资源,如果你在x86上,linux内核空间默认1G,创建的线程数会大大受到限制
家境小康, 积分 1214, 距离下一级还需 786 积分
论坛徽章:0
原帖由 bobozhang 于
13:25 发表
3. 单个进程可创建线程数限制为:
& && &( 由系统变量 _SC_THREAD_THREADS_MAX 决定 ,调用函数 long sysconf( _SC_THREAD_THREADS_MAX)&&)
这个只是理论值,实际上不可能达这么多,没个线程在 ...
小富即安, 积分 2692, 距离下一级还需 2308 积分
论坛徽章:0
一般大牛都是深居简出。。
稍有积蓄, 积分 480, 距离下一级还需 20 积分
论坛徽章:0
回复 #1 leadsino 的帖子
小弟可不是大牛。连二牛也不是
不过,我有点知道,就是,当里个当。。。。
创建线程,在静态编译和默认动态编译的情况,能创建的线程数不一样。
你可以试一下。
原因我想可能就是动态和静态对系统资源的开销不一样吧。
至于你看到的各种值,我想也是一种理论值吧!要达到这种值,或许也有个系统配置要求吧!
windows号称多少内存能运行,可是你要用它告诉你的最小配置运行,估计很惨!
论坛徽章:0
换 x86_64 再说
家境小康, 积分 1711, 距离下一级还需 289 积分
论坛徽章:0
在程序里调低每个线程所用的栈大小可以提高并发线程数,具体函数和属性请搜索
但是你想创建 个线程的话恐怕比较难
论坛徽章:0
NPTL 理论上可以创建的线程数只是受限于可用内存容量。
线程栈可以算下,你说的大小指的是核外的。内核里每个线程一样都是8k两个页面。核外的是“虚”存。
理论上每个线程核外都可以申请4G的。Linux最大线程数限制及当前线程数查询_Linux教程_Linux公社-Linux系统门户网站
你好,游客
Linux最大线程数限制及当前线程数查询
来源:Linux社区&
作者:zhangming
Linux最大线程数限制及当前线程数查询
1、总结系统限制有:
/proc/sys/kernel/pid_max #查系统支持的最大线程数,一般会很大,相当于理论值
/proc/sys/kernel/thread-max
max_user_process(ulimit -u) #系统限制某用户下最多可以运行多少进程或线程
/proc/sys/vm/max_map_count
硬件内存大小
2、Java虚拟机本身限制:
-Xms& #intial java heap size
-Xmx& #maximum java heap size
-Xss& #the stack size for each thread
3、查询当前某程序的线程或进程数
pstree -p `ps -e | grep java | awk '{print $1}'` | wc -l
pstree -p 3660 | wc -l
4、查询当前整个系统已用的线程或进程数
pstree -p | wc -l
1、 cat /proc/${pid}/status
2、pstree -p ${pid}
3、top -p ${pid} 再按H&
或者直接输入 top -bH -d 3 -p& ${pid}
手册中说:-H : Threads toggle
加上这个选项启动top,top一行显示一个线程。否则,它一行显示一个进程。
手册中说:H Show threads as if they were processes
这样可以查看所有存在的线程。
5、ps -mp &PID&
手册中说:m Show threads after processes
这样可以查看一个进程起的线程数。
本文永久更新链接地址:
相关资讯 & & &
& (01月23日)
& (06/15/:42)
& (04/04/:08)
& (01月18日)
& (04/12/:56)
& (01/08/:40)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款1、总结系统限制有:
/proc/sys/kernel/pid_max #查系统支持的最大线程数,一般会很大,相当于理论值
/proc/sys/kernel/thread-max
max_user_p...
打开/etc/security/limits.conf文件
在下面加入如下两行,其中wacos是用户名,*可以代表所有用户
linux下文件描述符的介绍
( 16:01:56)
ulimit -n和-u可以查看linux的最大进程数和最大文件打开数。
临时方法:
为了优化linux性能,可能需要修改这个最大值。临时修改的话ulimit -n 204800就可以了,重启后失...
研发环境上的Linux项目启动报错:Caused by: java.lang.OutOfMemoryError: unable to create new native thread
开始以为是...
文章来源:未知
在做网络服务的时候tcp并发服务端程序的编写必不可少。tcp并发通常有几种固定的设计模式套路,他们各有优点,也各有应用之处。下面就简单的讨论下这几种模式的差异:
单进程,单线程
大家都知道Linux系统默认打开文件数是1024,而实际的生产环境中,这个值总是显得太小,而太小的后果就是你的系统会报:too many open files 等这样的错误导致你系统死掉,所以我们总是...
1. 首先可以运行下面的程序检查,检查你现在的系统总共能创建多少个线程。我的系统上是i=380,也就是最多能创建380个线程。后面分析为什么是它。
// maxthread.cc , compi...
linux的线程栈大小可以使用ulimit -s查看,对于ubunt 2.6的内核线程栈的默认大小为8M,如下:
shine@shine-bupt:~/Program/C$ ulimit -s
...
以限制mongodb的内存大小为例。
Cgroup限制方法:
mkdir /cgroup/memory/test/
echo 50M > /cgroup/memory/test/memory....
他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)

我要回帖

更多关于 linux 创建线程 的文章

 

随机推荐