三道面试题:线程安全、WCF的PerCall、PerSession、Signle、WCF的通道和分发器

线程安全

线程安全,就是指一个对象或一串代码,在多个线程下同时被访问或是执行,某个线程所得到的结果,和只有这个线程单独运行所得到的结果一样,就是线程安全的。

线程安全的问题是由全局变量和静态变量引起的。原因是:全局变量和静态变量都是存储在静态存储区,静态存储区是在程序编译时就已经分配好了,于是程序执行出现下面的情况:A线程创建了一个对象,该对象包含静态成员,默认值为5,A线程修改这个值为6。当启动B线程的时候,B线程访问该对象的静态成员的预期值为5,但实际上是6。所以这不是线程安全的。当然,若是程序对全局和静态成员只有读操作,该对象自然是线程安全的;若是有写操作,就需要考虑线程同步的问题了。

 

WCF的PerCall、PerSession、Signle

PerCall:当客户端调用每调用一次服务时,服务端的服务实例就被创建一次。

PerSssion:当客户端第一次调用服务时,服务端的服务实例就被创建一次,接下来的服务调用,都不会引起服务实例的创建。

Signle:这个就相当于设计模式中的单件模式。

 

WCF的通道和分发器

这两个概念要通过WCF的体系结构去理解。

通道:

要调用WCF的服务,需要在客户端生成相应的代理。代理调用服务和服务端进行交互依赖于WCF的拦截机制。当代理调用栈帧时,就将栈帧序列化到消息中,消息就通过通道链开始向下传递时,WCF开始执行拦截。通道就相当于一个拦截器。通道链上,不同阶段的通道节点具备不同的功能:比如序列化,编码,加密,传输等功能。

这里要解释一下栈帧的概念:

栈的作用:函数调用、保存函数的返回地址、形参、函数内的局部变量。

栈帧:为单个过程分配的那部分栈称为栈帧。就是:为调用某个函数所分配的栈即为栈帧。在WCF中可以理解为:代理所调用的那个方法。

分发器:

观察WCF的体系结构发现,客户端通过传输通道把消息传出之后,并没有和服务端保持联系,具体去调用某个服务其实是服务分发器管控的。按照WCF服务编程上面的说法,这个分发器就是服务端的本地客户端。分发器是如何寻找到客户端要调用的服务呢,就是通过消息信封中,就是SOAP文档中的内容,根据里面的ABC和栈帧(其实就是服务名称)在服务端找到对应的服务,然后进行调用。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值