欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

自己收录: 对流关闭的一点认识 博客分类: 杂谈 多线程AOP设计模式 

程序员文章站 2024-03-25 09:01:22
...

   流和数据库连接这类系统资源有两个特点,一个是有限性,二独占性。

 

   所以这类资源被占用的时间应该尽可能短,而数据库连接池这类被池化的对象还有另外一层原因,创建资源过程消耗时间或空间过多。对象的生命周期基本上都是create-->ready-->serve(maybe many time)-->destroy,对于我们来说serve的过程是最重要的,如果对象是无状态的,则可以多线程共享,如果是有状态的或者提供的数据是不可分割的(事务的),则为每个线程服务完毕之后,需要置为ready状态才可为下个线程服务。

 

   我们需要增强的是ready-->serve这段,最坏的情况就是不能线程共享的对象要长时间的服务,假如事务的不可分割,需要长时间占用资源对象的serve时间。这就要需要协作对象之间有某种默契,谁创建谁关闭则是一种默契了,而另置一个事务控制器(通常是AOP织入)也是一种默契。前者是创建者兼任了事务控制器,有时候事务资源夸的调用太多了,那事务资源通常都会某种包装,比如创建者把资源包装起来,除了创建者本身,不能destroy资源(或者将资源重置ready状态),对于使用过Proxy模式的人来说这再熟悉不过了,Proxy原装对象,只要把close方法“挂空”。但这里有个陷阱就是创建者忘记关闭资源了,需要有个测试机制对其进行补漏,而事务控制器则不易出现这方面的缺陷。
  

   有些手段可以缓解长时间占用系统资源(长事务)的处理过程中的资源竞争,例如:事务设计是可分段提交的,或快速失败的,或乐观锁机制,或特殊的内存锁等等手段,只要冲突不多,是种有效的减少关键资源占用手段。正所谓:以无限为有限,以无法为有法。