wcf并发处理模型(随记)
---------------------------------------------------------------------------------------并发性课程:
1.多个线程同时访问相同资源,将产生并发问题;single(单个)(缺省),Reentrant(可重入);
2.wcf缺省会保护并发访问;
3.在实体模型中,Perssion,single中特有用;
4.在实现接口的服务上添加标记;[ServiceBehavior(ConcurrencyMode=ConcurrencyMode.Single)]
------single:对于每个服务实例,只有一个请求处理,处理时会加锁,若还有其他请求,就会进行排队
-single与percal:不会产生并发,也不会对吞吐量(单位时间内wcf处理请求数量)产生影响;同一时刻处理多个请求,因为服务实例与请求为1对1,不存在并发;
single与Persession:对于Persession服务,保护服务实例不会受多线程客户端影响;
single,模式会对单一客户端吞吐量产生影响,将请求进行排队;同一时刻只能处理一个请求;多个客户端不会产生并发;
--single与singleton单件:
将多客户端的请求进行排队,影响吞吐量;
------Reentrant(可重入的)
1.和single一样为单线程;同一时刻处理一个请求;可重入(客户端与服务端来回调用)的单线程模式;
第一请求处理服务时,可以中途离开,当在继续处理时,需要排队等待,接着在处理;
主要应用在有回调的场景中;
Reentrant与percall:不会产生死锁,但并发模型为single的话,一旦出现回调会产生死锁;
所以,有回调的话,不要使用single并发模型,英爱使用Reentrant并发模型;
reentrant与PerSession和singletons:
一个请求完成后接着回调,这时,又进来一个请求,所以,回调完之后的第一个请求,
被当在外面,等第二个完成后,回调后的请求才能进行;
-------Multiple:不在是单线程模式,可以多个线程请求服务实例;增加吞吐量,
请求时,不会加锁;所以不会进行安排队列;要求开发者自己利用多线程机制来保护资源;
.net多线程包括:Monitor,Mutex,Semaphore,ReadWriteLock;
-------限流模式:
1.是所有服务不因一个服务的资源破坏而侵占其他资源导致其他服务受影响;
指定吞吐量控制设置:
MaxConcurrentCalls:限制发送请求;缺省为16;
MaxConCurrentInstances:限制服务实例的数量,缺省为int.MaxValue;
MaxConcurrentSessions:限制会话的数量;
--配置项配置:
<behaviors>
<serviceBehaviors>
<behavior name="AllenBehavior">
<serviceThrottling maxConcurrentCalls="" maxConcurrentInstances="" maxConcurrentSessions=""/>
--编程设置:
ServiceThrottle throttle=host.Description.Behaviors.Find<ServiceThrottle>();
if(throttle!=null)
{
throttle.MaxConcurrentCalls=30;
}
--限流与PerCall,MaxConcurrentCalls和MaxConCurrentInstances越大吞吐量越大;
--限流与PerSession:MaxConcurrentCalls控制吞吐量,MaxConCurrentInstances应大于或等于MaxConcurrentSessions;
--限流与Singleton:PerSession:MaxConcurrentCalls控制吞吐量,实例只有一个所以MaxConCurrentInstances的设置没意义;
----------负载平衡和故障转移;
1.负载平衡与PerCall:随记加载;
2.负载平衡与PerSession:跟着session走
3.负载平衡与传输会话,tcp,跟着Socket走;
4.负载平衡与安全会话,
我们要根据性能计数器测量总体的吞吐量并进行限流设置;
wcf并发处理模型(随记)的更多相关文章
- wcf实例模型(随记)
-----------------------------------------实例模型: 1.InstanceContentextMode: -------PerCall(单调):无状态,每次调用 ...
- opengl加载多个3ds模型失败记
VC6 下载 http://blog.csdn.net/bcbobo21cn/article/details/44200205 opengl环境配置 http://blog.csdn.net/bcbo ...
- WCF:并发处理
当多个线程同时访问相同的资源的时候就会产生并发,WCF缺省情况下会保护并发访问.对并发访问需要恰当处理,控制不好不仅会大大降低WCF服务的吞吐量和性能,而且还有可能会导致WCF服务的死锁.一.WCF并 ...
- WCF 程序入门
WCF是微软公司推出的符合SOA思想的分布式应用程序技术框架和编程模型,是建立在消息通信这一概念基础上运行的一个运行时服务系统. WCF编程模型的目标是实现以下两个实体之间的通信:WCF服务端和WCF ...
- [WCF编程]5.绑定概述
一.绑定概述 WCF提供了一个编程框架,可以抽象化服务创建的复杂过程.绑定允许开发人员将精力集中在问题本身上,而无需考虑如何创建允许系统运行的架构,因为WCF已经创建了架构. 绑定类型是开发人员控制W ...
- WCF初识
WCF能干什么? 在win32中,应用程序是运行在进程的线程中的,.NET出现之后,出现了AppDomain,其实就相当于在进程和线程之间又又了一层包装层,类似于子进程的概念,在一个进程或者应用程序域 ...
- WCF初探-21:WCF终结点(endpoint)
WCF终结点概述 在之前文章的示例中,我们都是通过配置服务的终结点(endpoint)发布的服务,供客户端调用,这是因为WCF服务的所有通信都是通过该服务的终结点进行的.每个终结点(endpoint) ...
- WCF分布式开发步步为赢(3)WCF服务元数据交换、配置及编程开发
今天我们继续WCF分布式开发步步为赢(3)WCF服务元数据交换.配置及编程开发的学习.经过前面两节的学习,我们了解WCF分布式开发的相关的基本的概念和自定义宿主托管服务的完整的开发和配置过程.今天我们 ...
- 传说中的WCF(10):消息拦截与篡改
我们知道,在WCF中,客户端对服务操作方法的每一次调用,都可以被看作是一条消息,而且,可能我们还会有一个疑问:如何知道客户端与服务器通讯过 程中,期间发送和接收的SOAP是什么样子.当然,也有人是通过 ...
随机推荐
- enq: TX - row lock contention 参数P1,P2,P3说明
enq: TX - row lock contention三个参数,例如,下面的等待事件 * P1 = name|mode <<<<<<< ...
- IntelliJ IDEA于Make Project时报:子字符串不是票面金额的结束、非法的表达式显示启动
IntelliJ IDEA于Make Project当系统提示很多错误,什么孩子不是字符串票面金额的结束.非法的表达式显示启动-- 解决方法是改变File Encoding,更改方法:File > ...
- swiper实现触摸滑动
引入文件的必要性 <link href="css/swiper.min.css" rel="stylesheet" type="text/css ...
- sharepoint 2013 更改用户配置文件属性值的方法 modify user profile
在此前写了两篇文章sharepoint 的UserProfile博客 sharepoint 2010 获取用户信息UserProfile方法 sharepoint 2010 怎样用SocialComm ...
- 蜘蛛牌 (DFS)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1584 全部状态都判断一遍 代码: #include <stdio.h> #include ...
- jQuery中queue和dequeue的用法
jQuery中的queue和dequeue是一组很有用的方法,他们对于一系列需要按次序运行的函数特别有用.特别animate动画,ajax,以及timeout等需要一定时间的函数 queue和dequ ...
- VS2010-使用“预先生成事件命令行”和“后期生成事件命令行”功能
原文:VS2010-使用"预先生成事件命令行"和"后期生成事件命令行"功能 xcopy /r /y $(TargetPath) $(ProjectDir)..\ ...
- linux_安装 redis
Installation Download, extract and compile Redis with: $ wget http://download.redis.io/releases/redi ...
- oracle_导入、导出数据
逐步整理oracle导入导出数据 1.单表,不同库之间的导入导出 导出exp system/manager@myoracle file=d:\daochu.dmp tables=(table1) sy ...
- Android学习----异常(2):Please ensure that adb is correctly located at ' ... '
打开任务管理器,在后台进程中找到 kadb,结束这个进程,重新启动eclipse.