互联网开发(一) 并发基础知识

一、并发的基本含义
        在操作系统中,并发是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。
在关系数据库中,允许多个用户同时访问和更改共享数据的进程。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/

时间: 2024-10-01 08:10:50

互联网开发(一) 并发基础知识的相关文章

并发基础知识

写在前面的话 从这篇文章开始就正式进入了并发主题,该主题相关知识较前面的集合主题会比较晦涩难懂,需要不断回顾.整理,才能构建出自己的知识网络. 首先推荐一本讲并发的好书:JAVA并发编程实战.这本书非常完整的讲解了关于并发的知识点,是一本不可多得的好书,如果有时间一定要多看几遍. 下面放一张并发主题的思维导图(受限于网页大小,请童鞋们自行下载图片浏览): 从这张图中可以看到并发相关的知识点非常多并且非常杂,我们这个主题不可能把这里边所有罗列的知识点全部深入讲解一遍,所以我在这里只能挑选一些相对比

前端开发:css基础知识之盒模型以及浮动布局。

前端开发:css基础知识之盒模型以及浮动布局 前言 楼主的蛮多朋友最近都在学习html5,他们都会问到同一个问题 浮动是什么东西?  为什么这个浮动没有效果?  这个问题楼主已经回答了n遍.今天则是把它写到我的博客中,想知道自己过来翻就好啦 ^_^  下面楼主把当前的自己对css的基础认知一一给大家道来...... 盒模型 谈到盒模型,有经验的小伙伴一定滚瓜烂熟,无非就是 内容(content).填充(padding).边框(border).边界(margin): 这些属性我们可以把它转移到我们

SQL点滴17—使用数据库引擎存储过程,系统视图查询,DBA,BI开发人员必备基础知识

原文:SQL点滴17-使用数据库引擎存储过程,系统视图查询,DBA,BI开发人员必备基础知识 在开发过程中会遇到需要弄清楚这个数据库什么时候建的,这个数据库中有多少表,这个存储过程长的什么样子等等信息,今天把自己工作过程中经常用到的一些数据库引擎存储过程,系统视图等等总结一下以备不时之用.下面的知识多是自己总结,有一些参考了MSDN. sp_help 有时候想尽快查出数据库对象的相关信息,这个存储过程就很有用了.使用它可以查询出整个数据库中所有对象的相关信息.直接运行sp_help结果如下图1,

Java并发基础知识

1 线程和进程 进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的.系统运行一个程序即是一个进程从创建,运行到消亡的过程. 在 Java 中,当我们启动 main 函数时其实就是启动了一个 JVM 的进程,而 main 函数所在的线程就是这个进程中的一个线程,也称主线程. 线程与进程相似,但线程是一个比进程更小的执行单位.一个进程在其执行的过程中可以产生多个线程.与进程不同的是同类的多个线程共享进程的堆和方法区资源,但每个线程有自己的程序计数器.虚拟机栈和本地方法栈,所以系统在

活到老学到老:iOS开发中的基础知识(一)

本文参考 标哥的博客:宝库iOS开发笔试题 进行学习整理.与其说是看面试题,不如说是对自己知识的巩固.工欲善其事必先利其器,基础知识不牢固可能会导致编程中的一些注意不到的问题.总之一句话:活到老,学到老. 1.数组中的元素去重问题. //重复元素 NSArray *array = [NSArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5",@"1"

iOS开发多线程篇—基础知识 NSOperation

原文  http://www.cnblogs.com/dyf520/p/3807187.html -------NSOperation简介---- 1.NSOperation的作用 ·配合使用NSOperation和NSOperationQueue也能实现多线程编程 2.NSOperation和NSOperationQueue实现多线程的具体步骤 ·先将需要执行的操作封装到一个NSOperation对象中 ·然后将NSOperation对象添加到NSOperationQueue中 ·系统会自动将

STM32内部Flash极速赛车网站开发C语音基础知识

真的很着急,看那极速赛车网站开发 haozbbs.comQ1446595067 些老师云里雾里说来说去,他们知道自己说的是什么吗? 正点原子:第67讲 FLASH闪存编程原理与步骤-M3第68讲 FLASH模拟EEPROM实验-M3 其实就是说STM32的闪存,主要是读/写/擦除,做出了一个风格和SPI FLASH一致的模块. 而所谓的模拟EEPROM其实是:前者是页为单位,写之前要擦除,一擦就是2k这样(李工说:主要是器件只能1-->0而不能0-->1所以擦除其实是全部覆盖成1),而后者EE

并发基础知识 — 线程安全性

前段时间看完了<并发编程的艺术>,总感觉自己对于并发缺少一些整体的认识.今天借助<Java并发编程实践>,从一些基本概念开始,重新整理一下自己学过并发编程.从并发基础开始,深入进去,系统学习一下并发编程. 编写线程安全的代码,核心在于要对状态访问操作进行管理,特别是对共享的(Shared)和可变的(Mutable)状态的访问.对象的状态是指存储在状态变量(实例或静态域)中的数据.对象的状态还可能包括其他依赖对象的域.(Map.Entry) 一个对象是否需要时线程安全的,取决于该对象

IOS科研IOS开发笔记学习基础知识

这篇文章是我的IOS学习笔记,他们是知识的基础,在这里,根据记录的查询后的条款. 1,UIScrollView能完毕滚动的功能. 示比例如以下: UIScrollView *tableScrollView; tableScrollView=[[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];//窗体大小 tableScrollView.contentSize=CGSizeMake(640, 480);//设置内容视图的大