读书人

拔高并发程序的可伸缩性的7个技巧

发布时间: 2012-11-01 11:11:32 作者: rapoo

提高并发程序的可伸缩性的7个技巧

并发程序的可伸缩性主要是在保证程序安全同步,操作准确的前提下,保障程序在大量线程并发的情况下访问共享同步资源的效率.锁住某个共享的资源以获得独占式的访问这种做法会形成可伸缩性瓶颈——它使其他线程不能访问那个资源,即使有空闲的处理器可以调用那些线程也无济于事。为了取得可伸缩性,我们必须消除或者减少对独占式资源锁的依赖。

基于这种原理有如下几种解决方案,部分内容整理于ibm developerworks.

1 Vector<String> v = new Vector<String>();for(int i=0;i<v.size();i++){v.get(i);}

?vector是线程安全的,但是通过索引遍历vector并不是安全的,虽然size()和get()方法每次调用都是线程安全的,但是遍历操作本身应该视为一个事务来处理,事务是具有原子性的.如果临时插入或者删除一个元素,导致index发生变更就有可能读取重复或者少读取元素.可以拷贝一个vecotr的副本,对副本进行遍历操作.

6. 锁崩溃

与其在获取锁和释放锁之间切换,不如一直占有锁,把当前的工作完成.获取您已占用的锁比获取无人占用的锁要快得多。

7.减小锁占用的时间

不要把和同步无关的代码,预处理代码和后期处理代码都放在同步块中.

读书人网 >其他相关

热点推荐