---------------------------------------------------------------------------------------并发性课程:
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并发处理模型(随记)的更多相关文章

  1. wcf实例模型(随记)

    -----------------------------------------实例模型: 1.InstanceContentextMode: -------PerCall(单调):无状态,每次调用 ...

  2. opengl加载多个3ds模型失败记

    VC6 下载 http://blog.csdn.net/bcbobo21cn/article/details/44200205 opengl环境配置 http://blog.csdn.net/bcbo ...

  3. WCF:并发处理

    当多个线程同时访问相同的资源的时候就会产生并发,WCF缺省情况下会保护并发访问.对并发访问需要恰当处理,控制不好不仅会大大降低WCF服务的吞吐量和性能,而且还有可能会导致WCF服务的死锁.一.WCF并 ...

  4. WCF 程序入门

    WCF是微软公司推出的符合SOA思想的分布式应用程序技术框架和编程模型,是建立在消息通信这一概念基础上运行的一个运行时服务系统. WCF编程模型的目标是实现以下两个实体之间的通信:WCF服务端和WCF ...

  5. [WCF编程]5.绑定概述

    一.绑定概述 WCF提供了一个编程框架,可以抽象化服务创建的复杂过程.绑定允许开发人员将精力集中在问题本身上,而无需考虑如何创建允许系统运行的架构,因为WCF已经创建了架构. 绑定类型是开发人员控制W ...

  6. WCF初识

    WCF能干什么? 在win32中,应用程序是运行在进程的线程中的,.NET出现之后,出现了AppDomain,其实就相当于在进程和线程之间又又了一层包装层,类似于子进程的概念,在一个进程或者应用程序域 ...

  7. WCF初探-21:WCF终结点(endpoint)

    WCF终结点概述 在之前文章的示例中,我们都是通过配置服务的终结点(endpoint)发布的服务,供客户端调用,这是因为WCF服务的所有通信都是通过该服务的终结点进行的.每个终结点(endpoint) ...

  8. WCF分布式开发步步为赢(3)WCF服务元数据交换、配置及编程开发

    今天我们继续WCF分布式开发步步为赢(3)WCF服务元数据交换.配置及编程开发的学习.经过前面两节的学习,我们了解WCF分布式开发的相关的基本的概念和自定义宿主托管服务的完整的开发和配置过程.今天我们 ...

  9. 传说中的WCF(10):消息拦截与篡改

    我们知道,在WCF中,客户端对服务操作方法的每一次调用,都可以被看作是一条消息,而且,可能我们还会有一个疑问:如何知道客户端与服务器通讯过 程中,期间发送和接收的SOAP是什么样子.当然,也有人是通过 ...

随机推荐

  1. printf那点事

    1.打印内存地址 #include<stdio.h> int main() { int a; printf("%p\n",&a); //%p打印地址,自己主动加 ...

  2. js实现双击后网页自己主动跑-------Day55

    公司的界面设计环节总算是告一段落了,必需要承认的是,这段时间晚间的学习带给我非常多益处.在工作中偶尔的应用,效果出奇的好,收到领导和同事的一些小赞扬,表示非常欣慰,也长了点不少自信,尽管不理解,他们这 ...

  3. android app启动过程(转)

    Native进程的运行过程 一般程序的启动步骤,可以用下图描述.程序由内核加载分析,使用linker链接需要的共享库,然后从c运行库的入口开始执行. 通常,native进程是由shell或者init启 ...

  4. C编程的指针涛 ---第十笔记

    //指针实例搜索算法 //迷宫算法 //搜索是最长的使用深度优先搜索和广度优先搜索 //作为名称作为一个深度优先搜索,每路一直在寻找到底. //为了防止想法,这样的数据结构 //使得每次找到思路的时候 ...

  5. Java学习之路:ArrayList用法

    1.什么是ArrayList     ArrayList是一个动态数组传奇,使用MSDN声明.那是,Array复杂的版本号,它具有以下优点,例如: 动态的添加和降低元素 实现了ICollection和 ...

  6. javaEE异常摘要——更换工作区相同tomcat当部署在同一个项目疑难解答

    我有一个项目,我的工作区公告,没问题,它可以运行正常,但我把项目copy还有一个工作空间,然后发布到tomcat(随着tomcat,先前的工作空间remove deployment,公布信息)上去,想 ...

  7. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(16)-类库架构扩展以及DLL文件生成修改和用户的简单添加

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(16)-类库架构扩展以及DLL文件生成修改和用户的简单添加 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) ...

  8. 使用Heartbeat实现双机热备

    使用Heartbeat实现"双机热备"或者称为"双机互备"heartbeat的工作原理:heartbeat最核心的包含两个部分,心跳监測部分和资源接管部分,心跳 ...

  9. Tair LDB基于Prefixkey中期范围内查找性能优化项目总结

    "Tair LDB基于Prefixkey该范围内查找性能优化"该项目是仅一个月.这个月主要是熟悉项目..以下从几个方面总结下个人在该项目上所做的工作及自己的个人所得所感. 项目工作 ...

  10. linux_shell_轮询触发启动脚本

    while [ 1 ]do length=`redis-cli -h *.*.*.* -p 8000 llen eq` while [ $length -gt 1 ] do echo "le ...