你的位置:首页 > ASP.net教程

[ASP.net教程]互联网开发(一) 并发基础知识


一、并发的基本含义
        在操作系统中,并发是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。
在关系数据库中,允许多个用户同时访问和更改共享数据的进程。SQL Server 使用锁定以允许多个用户同时访问和更改共享数据而彼此之间不发生冲突。
在网络服务器上,并发是指同一时刻能处理的连接数,可以理解为服务器最多维护多少个会话数,比如,服务器能建立1000个TCP连接,即服务器同时维护了1000个socket,这个服务器的并发量就是1000,但是服务器可能只有单核或者8核,16核等,总之对这1000个socket连接的处理也是分时来做的。每个socket服务器处理的时间如果是1s,那么该服务器1s内可以处理完1000个请求,如果每个socket处理100ms的话,那么该服务器1s内可以处理10000个请求。
二、与并行区别
        并发:当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间 段分配给各个线程执行,在一个时间段的线程代码运行时,其它线程处于挂起状。.这种方式我们称之为并发(Concurrent)。
并行:当系统有一个以上CPU时,则线程的操作有可能非并发。当一个CPU执行一个线程时,另一个CPU可以执行另一个线程,两个线程互不抢占CPU资源,可以同时进行,这种方式我们称之为并行(Parallel)。
        区别:并发和并行是即相似又有区别的两个概念,并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔内发生。在多道程序环境下,并发性是指在一段时间内宏观上有多个程序在同时运行,但在单处理机系统中,每一时刻却仅能有一道程序执行,故微观上这些程序只能是分时地交替执行。倘若在计算机系统中有多个处理机,则这些可以并发执行的程序便可被分配到多个处理机上,实现并行执行,即利用每个处理机来处理一个可并发执行的程序,这样,多个程序便可以同时执行。
三、IIS中的并发管理
        1、IIS中并发相关术语、设置
        ▲连接数、并发连接数:这两个概念网上的解释都是说不同的,但通过实验,笔者发现在IIS中他们一个概念,就是在对并发连接,即站点可以同时容纳客户请求的最高连接数做设置,而且我通过设置两个参数发现会互相影响。可能网上说的连接数是专指虚拟主机的环境吧。
        ▲最大并发工作线程数:简单的说就是IIS在并发连接请求过来时的处理机制,它会更机智的以某个数量级为单位来分批处理,让没有处理连接请求排队等待。比如最大并发工作线程数设置为50,当200个连接请求过来时,50个请求被处理,剩下的150会显示正在加载,而不是503的错误。这时其它用户就不要点刷新按钮了,因为点的越多,你的请求在排队队伍中越靠后。此项设置未在IIS中,而是修改ASP.NET配置文件machine.config(Win10默认位置:C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\ 修改参考:https://msdn.microsoft.com/zh-cn/library/7w2sway1.aspx)
        ▲应用程序池的队列长度:上一个概念提到请求排队,那是不是让所有未处理的都排队呢,显示是不合理的。通过此项可以设置排队的数量,超过数量的仍然返回503错误,与超过并发连接数一样的效果。
        ▲应用程序池的最大工作进程数:如果这个值大于 1,那么当有连接请求时会启动多个新的工作进程实例,可启动的最多进程数为您所指定的最大工作进程数,后续更多的请求将以循环的方式发送至工作进程,这个 每个工作进程都能承担负载一些连接请求,当然是以消耗cpu等硬件做代价,这是值得的,如果web服务器cpu使用率很低但是又需要更高效的处理并发连接 请求,为何不这么做呢?
        如果网站中用到了依赖进程的Session和Cache等对象,则不能保存在服务器内存中,存储方式选用StateServer或者SQLServer会更好,另外多个工作进程切换时会有上下文复制,这也是资源消耗更多地方
        最大工作进程数的设置方法:(拷贝)按照每工作进程能承载30个并发的原则来确定应用程序池的最大工作进程数。同时要注意,每个工作进程大约会占用 200M左右的系统内存,在设置最大工作进程数的时候,要主要最大工作进程数与200M的乘积不要超过系统最大可用内存数。一般情况下,建议按照每次增加 5个工作进程数的方式对最大工作进程数进行调整,调整完后对网站观察一段时间,如依然无法满足要求,再继续增加5个工作进程数。
        2、观察并发连接数
a:命令行方式查看IIS连接请求的状态统计
C:\>netstat -an |find "10.0.1.13:80" |find "ESTABLISHED" /C
1297
C:\>netstat -an |find "10.0.1.13:80" |find "TIME_WAIT" /C
129
b:利用nagios监控的windows客户端工具NSClient++-0.2.7对相应的计数器进行监控,超过一定的阈值则通过fetion报警!
c:计数器的添加,利用计数器可以图形化的展示出来。
步骤:运行命令 “perfmon.msc”打开性能监视器,点击添加计数器。计数器对象选择【Web Service】->【Current Connections】;对象实例选择【_Total】,也可根据需要选择具体的Web服务
实例;点击【添加】按钮,结果如下图所示。

将和本监控无关的信息删除,仅留下关心的Web服务信息。从多个客户端发出并发请求,可以监控到实时的并发连接数。根据图中显示结果,不难发现当前同时刻并发连接数为5个。

可以通过右击计数器打开属性对图表做一些设置,如颜色、步长等。


参考:http://blog.csdn.net/coolmeme/article/details/9997609
http://www.cnblogs.com/qmfsun/p/4997307.html
http://ylw6006.blog.51cto.com/470441/1058070/