您的位置:首页 > 其它

.Net中线程栈的隔离性应用

2014-01-11 21:01 176 查看
在架构设计中合理的利用线程栈是实现高并发和高吞吐的重要前提。

大多数应用上下文在架构上就是利用线程栈作为上下文,包括事务上下文、用户会话上下文、安全上下文等。

线程栈在基于Http请求的短连接中应用是最为广泛的,因为Http的无状态性正好符合了线程栈的处理。

放到线程栈中处理的几种常见情景

1、资源隔离,放到线程栈里处理,可以自然做到资源隔离,因为栈中的数据只对本栈负责,而不会影响其他线程的状态,这就保证了隔离安全性,前提是A线程栈中的资源不会流入B线程栈,这个通常会在架构层面隔离开来。

2、用户会话隔离,一个好的系统架构在会话请求层面应该是隔离的,A用户请求不会访问到B用户的数据,开发人员在使用已设计好的架构时,不会去考虑A可能访问B的资源时的冲突问题,他们更多的是只关心单一的逻辑的实现,而单一的逻辑实现大多数也是为某一会话负责的,良好的架构要保证请求层面就开始隔离。因为线程栈自我隔离性能,会话就可以构建在对应的处理线程栈上,会话就可以跟着处理线程栈流动到会话的其他服务上,可能本进程的服务,也可能是远程的过程调用。

3、事务隔离,尤其涉及到在分布式的事务环境下,事务上下文要求在整个请求阶段具有一个持久性,而事务失败或异常请求结束等,整个事务容易又能自动回收处理,事务环境如果依托到线程栈上,如果出现请求失败或连接丢失,对应的线程栈也会进入异常处理回收,此时事务容器如果关联到线程栈上就可以自动的释放回收。

4、连接会话隔离,在多线程的应用环境中,客户端可能会同时发起很多个连接请求,每个连接请求可能都是基于异步的处理,如果依靠给连接做标记,这在业务处理上就会相当麻烦,开发人员要时刻注意是哪个ID标记的连接,如果利用线程栈,那就可以利用线程的唯一性来区分,回调可以根据返回的线程栈ID来处理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  线程栈 .net