VS2010 SP1

在线安装包:https://cid-3ca83445bd7767a0.office.live.com/browse.aspx/.Public/VS2010

查最特别线程数:

 

cat /proc/sys/kernel/threads-max

ISO:http://download.microsoft.com/download/E/B/A/EBA0A152-F426-47E6-9E3F-EFB686E3CA20/VS2010SP1dvd1.iso

ulimit

 

User limits – limit the use of system-wide resources.

创新内容:http://msdn.microsoft.com/en-us/visualc/gg697159

Syntax
ulimit [-acdfHlmnpsStuv] [limit]

图片 1

Options

 

-S Change and report the soft limit associated with a resource. 
-H Change and report the hard limit associated with a resource. 

图片 2

-a All current limits are reported. 
-c The maximum size of core files created. 
-d The maximum size of a process’s data segment. 
-f The maximum size of files created by the shell(default option) 
-l The maximum size that may be locked into memory. 
-m The maximum resident set size. 
-n The maximum number of open file descriptors. 
-p The pipe buffer size. 
-s The maximum stack size. 
-t The maximum amount of cpu time in seconds. 
-u The maximum number of processes available to a single user. 
-v The maximum amount of virtual memory available to the process. 

 

ulimit provides control over the resources available to the shell and to
processes started by it, on systems that allow such control.

图片 3

If limit is given, it is the new value of the specified resource.
Otherwise, the current value of the soft limit for the specified
resource is printed, unless the `-H’ option is supplied.

When setting new limits, if neither `-H’ nor `-S’ is supplied, both
the hard and soft limits are set.

Values are in 1024-byte increments, except for `-t’, which is in
seconds, `-p’, which is in units of 512-byte blocks, and `-n’ and
`-u’, which are unscaled values.

The return status is zero unless an invalid option is supplied, a
non-numeric argument other than unlimited is supplied as a limit, or an
error occurs while setting a new limit.

ulimit is a bash built in command.

Ulimit命令
安限制
可以拿命加到profile文件里,也得在/etc/security/limits.conf文件中定义
限制。
命参数
-a 显示有限制
-c core文件大小的上限
-d 进程数据段大小的上限
-f shell所能创造的文件大小的上限
-m 驻留内存大小的上限
-s 堆栈大小的上限
-t 每秒可占的CPU时间上限
-p 管道大小
-n 打开文件反复之上限
-u 进程数的上限
-v 虚拟内存的上限
除开可用Ulimit命令设置外,也得在/etc/security/limits.conf文件中定义限制。
domino type item value
domino是因符号@开头的用户称或组名,*表示有用户,type设置也hard or
soft。item指
定想限制的资源。如cpu,core nproc or maxlogins。value是应和的限制值。

网限制默认值

[root@flyinweb ~]# 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) 32764 
max locked memory (kbytes, -l) 32 
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) 32764 
virtual memory (kbytes, -v) unlimited 
file locks (-x) unlimited

[root@flyinweb ~]# lsb_release -a 
LSB Version:
:core-3.1-ia32:core-3.1-noarch:graphics-3.1-ia32:graphics-3.1-noarch 
Distributor ID: CentOS 
Description: CentOS release 5.2 (Final) 
Release: 5.2 
Codename: Final

linux 系统受单个进程的最为特别线程数发那极其要命的限定 PTHREAD_THREADS_MAX

本条界定好当 /usr/include/bits/local_lim.h 中查看

对 linuxthreads 这个价一般是 1024,对于 nptl
则从未硬性的限制,仅仅受限于系统的资源

其一系统的资源主要就是线程的 stack 所占据的内存,用 ulimit -s
可以查默认的线程栈大小,一般情形下,这个价值是 8M

可以描绘一段落简单的代码验证最多足创造多少只线程

int main() { int i = 0; pthread_t thread; while (1)
{ if (pthread_create(&thread, NULL, foo, NULL) != 0) return; i
++; printf(“i = %d\n”, i); } }

试验显示,在 linuxthreads 上最多可创建 381 独线程,之后虽会回来
EAGAIN

当 nptl 上太多好创造 382 独线程,之后便会回到 ENOMEM

其一价值和辩论了吻合,因为 32 位 linux 下之过程用户空间是 3G
的大小,也不怕是 3072M,用 3072M 除以 8M 得
384,但是事实上代码段和数据段等还要占用部分空中,这个价应向下取整到
383,再减去主线程,得到 382。

那为什么 linuxthreads 上还要掉一个线程呢?这可是无限对了,因为 linuxthreads
还索要一个管理线程
http://www.cnblogs.com/roucheng/
为了突破内存的限制,可以产生少栽办法

1) 用 ulimit -s 1024 减多少默认的栈大小
2) 调用 pthread_create 的时光用 pthread_attr_getstacksize
设置一个比小之栈大小

假使小心的凡,即使如此的吗无力回天突破 1024 单线程的硬限制,除非再编译 C 库

有关内容:

无异于、2.4基础和2.6基石的第一分 

2.4基本的出众系统上(AS3/RH9),线程是因此轻量进程实现之,每个线程要占一个经过ID,在服务器程序上,如果碰到高点击率访问,会招致进程表
溢起,系统为保护溢起底进程表,会时有发生抛锚的暂停服务状况,而2.6外审查就未见面发出由于大量线程的创同销毁导致进程表溢出之题目

其次、线程结束得放线程堆栈 
即使
是说,线程函数必须调用pthread_exit()结束,否则直到主进程函数退出才假释,特别是2.6内对环境,线程创建速度高速,一不小心就内存为
吃光,这一点反是2.4本环境好,因为2.4基础创建的凡过程,而且线程创建速度较2.6舅核慢几单数据级。特别提醒,在64各项CPU,2.6外核创
建线程的快慢更是疯狂,要是太快的话,加上usleep ()暂停一点点工夫比好

老三、不要编得锁之线程应用 

有那些未待互斥量的程序才会无限可怜限度的使线程编程带来的好处,否则就会另行慢,2.6舅对是抢占式内核,线程间共享冲突时有发生的几率远较2.4根本环境
高,尤其要顾线程安全,否则就算是单CPU也会见生出莫名其妙的内存不联合(CPU的高速缓存和主存内容未等同),Intel的初CPU为了性使用
NUMA架构,在线程编程中必定要是专注扬长避短。

季、单进程服务器最要命并发线程数与外存 
死有趣,在默认的ulimit参数下,不改动外核头文件 
AS3 512M内存最多1000连作不止连接 
CentOS4.3 512M内存最多300连作不止连接 
似乎
乎是CentOS不如AS3,这里根本由是ulimit的布置造成,两单体系默认的配备差异颇可怜,要惦记就进程维持更多线程接收并发连接,就假设硬着头皮缩小
ulimit
-s的参数,插再多之内存条,单进程服务器上2000并作一点且未碍事,POSIX默认的限是各个经过64线程,但NTPL并非纯正POSIX,不必理会这
独限,2.6舅核下真正的限制是外存条的插槽数目(也许还有买内存的钱数)

最为
近几天之编程中,注意到在32员x86平台达成2.6外核单进程创造最可怜线程数=VIRT上限/stack,与总内存数关系不大,32号x86系统默认的
VIRT上限是3G(内存分配的3G+1G法),默认
stack大小是10240K,因此就进程创造线程默认上限为就是300(3072M /
10240K),用ulimit -s
修改stack到1024K虽然只要上限升到大约3050。我手下没64号系统,不明了2.6外按在64各类上单进程创造线程上限(实际上是本人懒得在同事的
机器上装fc4_x86_64)。

前面把天购买了同一套廉价的64号x86系统(64位赛杨+杂牌915主板),安装了CentOS4.3的x86_64版本,跑了一如既往整整下面的粗程序,得到的结果是:在ulimit
-s 4096底景下,单进程最深线程数以16000多或多或少,用top看 
VIRT 的上限是64G,也不怕是36号, cat /proc/cpuinfo的结果是:address sizes :
36 bits physical, 48 bits virtual, 和本身设想的正规64各项系统不同,
我一直认为64各系统的内存空间也是64个的 
附注1: 
单 位里某BSD
FANS用AMD64笔记本跑多少序测试线程创建速度(线程创建后即时phread_detach()然后跟随pthread_exit(),共计
100万只线程),同样源码OpenBSD竟然比FreeBSD快了3倍增,什么时候OpenBSD也换得疯狂起来了?