并发程序的性能思考

  首先说下线程的死锁,个人想法(从艺术家吃饭说起):
  1.必须有资源想被多个线程独占,但是资源不能共享,也就是一次只能一个线程用
  2.一个线程抢占一个资源然后再等待另外一个线程(大家都这样)
  3.资源不能被强占,大家都是优先级相同的线程,都在那里等
  4.发生循环等待了(多个锁)
 避免死锁就是打破上面任何一条

    一个并发程序好坏大致需要两个方面:响应速度和伸缩性,也即是有多快和有多少,这往往是相互矛盾的两方面,我们需要做的就是平衡这两方面。
    从并发程序的特点看,我们可以从以下几方面入手性能的优化:
    1 多线程执行那么必须在多个线程里面上下切换,这需要操作系统保存上个线程的多线程,创建或者唤醒下个线程,这个都消耗资源。所以减少上下文切换,可以增加伸缩性(多几个线程执行)
    2  synchronized同步块,同步块意味着这个里面是单线程执行的,既是串行执行,其中synchronized保持了内存的可见性和原子性,volatile保证了可见性,这都使得线程的工作内存的内容每一次都要交换到主内存中,这样的话工作内存的缓存失效,所以尽量的缩小同步,也可以使用concurrent包的lock显示锁定。
   3  阻塞,这个看看io和nio就知道了,可以将阻塞的操作移除出我们主要的线程,另外起线程处理
   4  锁,这个在并发中很重要,可以减小持有的锁的时间(尽量的缩小同步块等),减少对锁的占用时间,比如拆分锁,读写分离锁,或者是分成好几个锁(concurrenthashmap),把独占锁分成多个锁
   5  线程池管理线程的创建和生命周期,减少创建和销毁线程的消耗
   6.不可变对象,抛弃一切的同步

 最重要的是在这之前我们需要审视我的环境:cpu,网络,i/0,数据库等等
   

posted on 2010-08-13 23:10 nod0620 阅读(183) 评论(0)  编辑  收藏 所属分类: 多线程


只有注册用户登录后才能发表评论。


网站导航:
 
<2024年5月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

导航

统计

常用链接

留言簿

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜