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是什么样子.当然,也有人是通过 ...
随机推荐
- python有些错误换行问题解决
有时候数据会遇到一些错误包.例如,正确的数据应: 20141010,aaa,bbb,ccc,ddd,eee 但实际的数据是来: 20141010,aaa,bbb, ccc,ddd, eee 这样出现错 ...
- AES加密CBC模式兼容互通四种编程语言平台【PHP、Javascript、Java、C#】
原文:AES加密CBC模式兼容互通四种编程语言平台[PHP.Javascript.Java.C#] 由于本人小菜,开始对AES加密并不了解,在网络上花了比较多时间查阅资料整理: 先简单从百度找来介绍: ...
- 【LaTeX排版】LaTeX纸排版<两>
1.文件夹的生成 直接使用命令\tableofcontents就可以. 其默认格式例如以下: 我们会发现.这种格式不一定是我们所期望的. 比方说,我们也希望章标题与页码之间也有点连线,而且也希 ...
- cocos2d-x 3.1.1 学习笔记[4]GridActions 网格动画
文章写的 http://blog.csdn.net/zhouyunxuan 老样子.见代码. //GridActions can only used on NodeGrid auto nodeGri ...
- SQL导入txt以及SQL中的时间格式操作
原文:SQL导入txt以及SQL中的时间格式操作 MySQL中导入txt的指令为: load data local infile "路径名称" into table "表 ...
- 第3章 抽象工厂模式(Abstract Factory)
原文 第3章 抽象工厂模式(Abstract Factory) 场景我们的系统要同时支持两个数据库 SqlServer 跟Oracle数据库 并且不同的环境要进行随时切换. 看下面的代码: 1 2 ...
- Hadoop-1.1.2、HBase-0.94.7完全分布式集群结构
爱的技术可以应用到实际生活生产,做艺术向往的东西不腻和音乐. 现将前期手里面的一个项目做一个大致的总结,与大家一起分享.交流.进步. 项目如今正在线上执行,项目名--基于Hadoop的数据分析综合管理 ...
- 求和问题(DFS)
输入: n=4 a={1,2,4,7} k=13 输出: YES 输入: n=4 a={1,2,4,7} k=13 输出: NO 选出若干数,使它们的和恰好为k #include <stdio. ...
- OJ提交题目中的语言选项里G++与C++的区别(转载)
原文链接:http://blog.polossk.com/201405/c-plus-plus-g-plus-plus G++? 首先更正一个概念,C++是一门计算机编程语言,G++不是语言,是一款编 ...
- JBPM——MyEclipse开发环境的搭建
第一次接触JBPM我不知道如何在工程中的应用.查了一些资料.大约在JBPM随着时代的发展有一定的了解.首先JBPM它是JBoss件平台的一个组成部分.是一个灵活的,易扩展的工作流管理系统,仅仅只是这个 ...