明辉手游网中心:是一个免费提供流行视频软件教程、在线学习分享的学习平台!

深入理解IIS的多线程工作机制

[摘要]首先让我们来看看IIS里面的这2个数字:最大并发连接数, 队列长度。 先说这2个数字在哪里看。 最大并发连接数:在IIS中选中一个网站, 右键网站名称, 在右键菜单中找到并点击【管理网站】-&...

首先让我们来看看IIS里面的这2个数字:最大并发连接数, 队列长度。 先说这2个数字在哪里看。

 

最大并发连接数:在IIS中选中一个网站, 右键网站名称, 在右键菜单中找到并点击【管理网站】->【高级设置】。 打开对话框如下图:

深入理解IIS的多线程工作机制

 

队列长度:在IIS中选中【应用程序池】, 在应用程序池列表中, 右键你想查看的, 在右键菜单中选择【高级设置】。 打开如下对话框:

深入理解IIS的多线程工作机制

 

这两个数字表面上看是影响我们站点的并发处理能力的, 但是具体是如何影响一个网站的并发处理能力的呢?要完全理解IIS的并发处理能力, 除了这2个数字, 实际上还有一个非常关键的数字:IIS最大并发工作线程数。

 

1. IIS最大并发工作线程数

在以前很长一段时间, 我一直以为IIS的【最大并发连接数】就是影响IIS最大并发工作线程数。 我以为将【最大并发连接数】设置为1万, 那么当1万个请求同时到来的时候, IIS会开启1万个线程进行处理, 如果同时到来2万个请求, 由于最大并发连接数只有1万, 那么剩余1万个请求就会放在队列里面, 当前面的1万个线程中某个完成了请求之后, 再从队列里面取一个请求。 但, 这个理解是完全错误的, 相信很多朋友也跟我有同样的理解。

 

现在, 首先让我们来理解什么是【IIS最大并发工作线程数】。 这个数字在IIS里面是没有界面进行设置的, 我以前根本就不知道有这个数字。 这个数字跟操作系统相关, 我的win7系统的IIS的值是10, VS2012自带的IIS Express的值是80。 对于windows服务器版本的系统的具体值是多少没有测试过, 但我猜应该也是有限制的。

 

这个数字到底是什么意思呢?回到上面举的例子, 当1万个请求同时进入IIS的时候, 由于win7系统的IIS只有10个工作线程, 那么这时1万请求中只有10个请求会在第一时间被处理, 剩余9990个请求都需要排队。 也就是说, IIS最多能够安排10个线程同时处理请求(win7版本的IIS, 有的可能是20)。

 

所以, 如果你用自己的win7系统测试IIS的性能的时候, 你可能发现, 不管你怎么设置【最大并发连接数】, 你的IIS处理能力都很有限。

 

2. 最大并发连接数

上面讲的IIS最大并发工作线程数, 看上去就是IIS的并发处理能力, 如果是这样, 那么【最大并发连接数】有什么意义呢?

 

还是上面的例子, 如果1万个请求同时到来, 而我们的win7系统的IIS最大并发工作线程数只有10, 这时如果将【最大并发连接数】设置为100, 会有什么效果呢?答案是:只有100个请求会收到正常响应, 剩余9900个请求直接返回503(服务不可用)的错误。 这时, 实际上进入排队等待的只有90个请求。

 

再换下测试参数, 如果将【最大并发连接数】设置为5000, 又会有什么效果?答案你可能已经知道了, 那就是一开始就有5000个请求直接返回503, 剩下5000个请求慢慢正常返回。

 

这里你看明白了吧, 【最大并发连接数】在我们的测试例子中, 影响到了排队的数量。 这样的话, 看上去【队列长度】又不知道什么意思了?

 

3. 队列长度

在上面的例子中, 如果1万个请求同时到来, 【最大并发连接数】设置为100。 这时我们知道, IIS首先会安排那10个线程去处理10个请求, 剩下90个请求都需要排队。 这时如果我们将【队列长度】设置为50, 那会出现什么情况?答案是, 40个请求会直接返回503服务不可用的错误(因为队列只有50个的长度, 剩下的40个就无法排队了), 最终只有60个请求会被正确处理。

 

读到这里, 你明白了吗?

 

结论

当很多请求同时到来的时候, IIS会根据【最大并发连接数】来判断是否有多余的请求, 多余的请求直接返回503, 然后再根据【队列长度】来判断是否有多余的请求排不了队, 排不了队的也直接返回503。 所以, 如何设置【最大并发连接数】和【队列长度】, 实际上是有公式可以计算的:

 

最大并发连接数 = 队列长度 + IIS最大并发工作线程数

 

最后再说说IIS的默认值对我们网站并发处理能力的影响。 IIS默认的【最大并发连接数】为4294967295(42亿多), 而【队列长度】默认值为1000。 对于windows server版本的IIS, 最大并发工作线程数可能几百(猜测, 可能没有限制), 按照这个默认值, 那么IIS同时处理的请求数也就1000多。 1000多这个数字才是IIS真正的并发处理能力, 而这个能力跟我们的代码没有关系。 那么哪些指标是评判我们网站的处理能力的呢?最重要的指标可能莫过于【每秒处理请求数】吧(在性能分析器里面可以查看), 这个数字也叫吞吐率。 如果每个请求处理速度非常快, 那么那么网站吞吐率就大, 吞吐率大那么支持的同时在线人数就大。 如果要做秒杀, 那就看你的秒杀相关的URL支持多大的吞吐率吧。 了解了这么多指标, 还没有涉及到CPU的计算能力。 CPU的计算能力是如何影响网站的处理能力的呢?还是那么多请求, 如果CPU很强大, 能够缩减每个请求的处理时间, 那必然会提高吞吐率。 还有很多的请求, 如果花在网络传输或者到数据库的传输时间比较多, 这部分等待时间CPU是闲置的, 如果能够提高CPU的利用率, 也可能提高网站的处理能力, 最充分的利用服务器的资源。 如果不想改代码而想提高CPU利用率, 可以在IIS的应用程序池中设置最大工作进程数(默认值为1), 可以设置为10如果当前CPU利用率只有百分之几的话, 调整这个数值需要特别注意每一个工作进程是独立的应用程序, 全局静态变量不共享。


网站建设是一个广义的术语,涵盖了许多不同的技能和学科中所使用的生产和维护的网站。