免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234下一页
最近访问板块 发新帖
查看: 20479 | 回复: 37
打印 上一主题 下一主题

Java虚拟机编程技术大家谈---多核和并发编程(获奖名单已公布-2013-6-7) [复制链接]

论坛徽章:
49
15-16赛季CBA联赛之福建
日期:2016-06-22 16:22:002015年亚洲杯之中国
日期:2015-01-23 16:25:12丑牛
日期:2015-01-20 09:39:23未羊
日期:2015-01-14 23:55:57巳蛇
日期:2015-01-06 18:21:36双鱼座
日期:2015-01-02 22:04:33午马
日期:2014-11-25 09:58:35辰龙
日期:2014-11-18 10:40:07寅虎
日期:2014-11-13 22:47:15申猴
日期:2014-10-22 15:29:50摩羯座
日期:2014-08-27 10:49:43辰龙
日期:2014-08-21 10:47:58
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-05-21 16:26 |只看该作者 |倒序浏览
获奖名单已公布,详情请看:http://bbs.chinaunix.net/thread-4085394-1-1.html

活动背景:
出于对新语言和新特性的的学习门槛、稳定性、性能、系统切换和维护成本等方面的顾虑,互联网企业,尤其是国内的大多数企业对这些新语言、新技术都持比较保守的态度,所以在国内我们很难接触到由这些新语言所引领的JVM并发编程的最新成果。当我们打开满是灰尘的并发编程工具箱,发现里面还是2007年起就一直在用的并发API,虽然用多了也感觉很顺手,但这些真的已经足够了吗?

本期话题:
1、在Java虚拟机编程中您是否用到硬件多核技术?
2、分享您在Java虚拟机或其他程序设计中并发编程的小技巧。
3、抛开程序语言层面,谈谈您对多核和并发编程的看法。

本期嘉宾:
ChinaUnix论坛架构设计版版主:duanjigang

活动时间:
2013年5月21日-6月10日

本期奖品:
《Java虚拟机并发编程 》图书5本

图书简介:


    原书名: Programming Concurrency on the JVM Mastering Synchronization, STM, and Actors
    原出版社: Pragmatic Bookshelf
    作者: (美)Venkat Subramaniam   
    译者: 薛笛
    丛书名: 华章程序员书库
    出版社:机械工业出版社
    ISBN:9787111418931
    上架时间:2013-5-8
    出版日期:2013 年5月
    开本:16开
    页码:215

本书理论叙述深入浅出。由于作者是一位出色的演讲者,所以本书的理论部分也大量运用了例证、类比等叙述手段,使得原本枯燥、生涩的理论叙述变得生动鲜活,从而更易于读者理解和接受。
   实践内容极具实用性。本书的内容涵盖了当前流行且成熟的多种JVM并发编程解决方案,包括Java7 Fork-Join API、STM、基于角色的模型,并且在每叙述完一种新模型之后都会有独立的一章专门用于展示前章所述模型在Clojure、Groovy、Java、JRuby和Scala中的用法和注意事项,有助于使用不同语言的读者都能找到相应的解决方案。虽然Java才是本书绝大多数国内读者的工作语言,但是上述几种语言对于本书所述的并发模型的支持方面可谓各胜擅长,有很多在Java中实现起来语法很繁琐的模型在其他语言中可能几行代码就可以完成。所以,了解一下其他语言简洁优雅的实现方式,也不失为开阔眼界的好素材,以后再有类似需求的时候也可以多一种选择。

样章下载:http://wenku.it168.com/d_000989181.shtml

论坛徽章:
9
CU大牛徽章
日期:2013-04-17 11:06:23CU大牛徽章
日期:2013-04-17 11:08:52CU大牛徽章
日期:2013-04-17 11:09:10CU大牛徽章
日期:2013-04-17 11:09:40CU大牛徽章
日期:2013-04-17 11:09:57CU大牛徽章
日期:2013-04-17 11:10:17CU大牛徽章
日期:2013-05-20 10:43:41CU大牛徽章
日期:2013-05-20 10:44:06CU大牛徽章
日期:2013-05-20 10:44:16
2 [报告]
发表于 2013-05-21 19:03 |只看该作者
1、在Java虚拟机编程中您是否用到硬件多核技术?
java已经越来越广泛地用于高性能服务器开发,利用多核技术是必须的。
鉴于我是写cpp的,所以没有用过java的硬件多核技术,不过非常有兴趣看看java的solution

2、分享您在Java虚拟机或其他程序设计中并发编程的小技巧。
估计是多线程为主。

3、抛开程序语言层面,谈谈您对多核和并发编程的看法。
多核和并发编程,要避免各种资源竞争,充分利用每个核的时间片,与此同时还能进行优先级任务配置就基本完美了。

论坛徽章:
32
CU大牛徽章
日期:2013-05-20 10:45:13每日论坛发贴之星
日期:2015-09-07 06:20:00每日论坛发贴之星
日期:2015-09-07 06:20:00数据库技术版块每日发帖之星
日期:2015-12-13 06:20:0015-16赛季CBA联赛之江苏
日期:2016-03-03 11:56:13IT运维版块每日发帖之星
日期:2016-03-06 06:20:00fulanqi
日期:2016-06-17 17:54:25IT运维版块每日发帖之星
日期:2016-07-23 06:20:0015-16赛季CBA联赛之佛山
日期:2016-08-11 18:06:41JAVA
日期:2016-10-25 16:09:072017金鸡报晓
日期:2017-01-10 15:13:292017金鸡报晓
日期:2017-02-08 10:33:21
3 [报告]
发表于 2013-05-21 21:23 |只看该作者
本帖最后由 jieforest 于 2013-05-27 11:18 编辑

1、在Java虚拟机编程中您是否用到硬件多核技术?
有时会用。通常是有并发需求时,要编写多线程应用,此时常常会用到硬件多核技术。


2、分享您在Java虚拟机或其他程序设计中并发编程的小技巧。
对于多核并发编程,开发者面对的第一个挑战是划分任务。或许需要对数据进行划分,清晰识别任务边界,还要尽可能地让每个任务在执行时只使用自己的数据。对于多线程要共享数据,问题将会很复杂。
开发者面对的第二个挑战是测试和调试。因为并发错误通常更加隐蔽,它们只有在高负荷和一些特定时序下才会出现,而且难以再现。因此,并发程序的测试需要更多的投入、更好的工具、更精巧的测试策略。需要测试两个要点:性能与安全性。安全性包括程序是否“做了该做的事”、以及是否“没做不该做的事”两个方面。而性能是指是否在规定的时间里做了正确的事。完整的测试计划应该包括:测试计划、单元测试、代码审查和静态分析等。测试计划应该确保后期的测试行为得以贯彻,同时还要衆-调测试过程中需要的各种资源。并发程序测试的难度远远高于串行程序测试。
有些高手总结了多核平台下的JAVA优化技巧,大致有:
1)代码优化
· 线程数要大于等于核数
· 尽量减少共享数据写操作
· 使用synchronize关键字
· 使用乐观策略
· 使用线程本地变量(ThreadLocal)
· 类中Field的排序
· 批量处理数组
2)JVM优化
· 启用大内存页
· 启用压缩指针
· 启用NUMA
· 激进优化特性
· 逃逸分析
· 高吞吐量GC配置
· 低延迟GC配置


3、抛开程序语言层面,谈谈您对多核和并发编程的看法。
从Java 5开始,JVM做了大量的改进,而且引入了java.util.concurrent包,Java 5以上版本的JVM可以使用底层指令取代锁机制,细化了互斥访问的粒度,提高了系统的可伸缩性和灵活性。新引入的java.util.concurrent包提供了大量线程和锁之上的并发抽象,比如线程池、闭锁、信号量、关卡等,可以帮助开发者快速地构建高效、可伸缩的系统。
多核与单核的区别在于,多核可以让程序真正"同时"执行,而不是多个进程轮流使用CPU。为了充分发挥每一个核的效用,应用程序需要多个线程同时运行来保持CPU核的忙碌。Java的多核并发编程可以帮助实现这一点。

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
4 [报告]
发表于 2013-05-21 22:30 |只看该作者
占地考虑。

论坛徽章:
8
天秤座
日期:2013-09-02 09:10:44CU十二周年纪念徽章
日期:2013-10-24 15:41:34子鼠
日期:2013-11-20 16:38:31巨蟹座
日期:2013-12-18 13:03:34天秤座
日期:2013-12-31 13:28:40卯兔
日期:2014-01-22 17:09:40技术图书徽章
日期:2014-02-27 20:31:47巳蛇
日期:2014-09-22 10:25:32
5 [报告]
发表于 2013-05-22 10:32 |只看该作者
支持下,这个工作在用

论坛徽章:
49
15-16赛季CBA联赛之福建
日期:2016-06-22 16:22:002015年亚洲杯之中国
日期:2015-01-23 16:25:12丑牛
日期:2015-01-20 09:39:23未羊
日期:2015-01-14 23:55:57巳蛇
日期:2015-01-06 18:21:36双鱼座
日期:2015-01-02 22:04:33午马
日期:2014-11-25 09:58:35辰龙
日期:2014-11-18 10:40:07寅虎
日期:2014-11-13 22:47:15申猴
日期:2014-10-22 15:29:50摩羯座
日期:2014-08-27 10:49:43辰龙
日期:2014-08-21 10:47:58
6 [报告]
发表于 2013-05-22 10:42 |只看该作者
dzminglong 发表于 2013-05-22 10:32
支持下,这个工作在用


那就详细说说嘛。。

论坛徽章:
8
天秤座
日期:2013-09-02 09:10:44CU十二周年纪念徽章
日期:2013-10-24 15:41:34子鼠
日期:2013-11-20 16:38:31巨蟹座
日期:2013-12-18 13:03:34天秤座
日期:2013-12-31 13:28:40卯兔
日期:2014-01-22 17:09:40技术图书徽章
日期:2014-02-27 20:31:47巳蛇
日期:2014-09-22 10:25:32
7 [报告]
发表于 2013-05-22 11:32 |只看该作者
回复 6# send_linux


    不敢班门弄斧,还是听听博主给大家分享分享经验

论坛徽章:
4
CU十二周年纪念徽章
日期:2013-10-24 15:41:34摩羯座
日期:2013-12-24 13:05:332015亚冠之西悉尼流浪者
日期:2015-10-09 16:03:47fulanqi
日期:2016-06-17 17:54:25
8 [报告]
发表于 2013-05-22 15:17 |只看该作者
本帖最后由 hbsycw 于 2013-05-23 15:31 编辑

好话题,积极参与下:

1、在Java虚拟机编程中您是否用到硬件多核技术?
答:随着计算机硬件的快速发展,现在多核的CPU已经成为主流。JAVA作为天生支持多线程的语言,并发就是提高程序性能的法宝。应该说,在单核时代的并发编程其实并不是一种真正的并发,而只是一种充分利用CPU计算资源的技巧;而现在的多核CPU才是并发编程的真正时代。对于多核CPU来说,要想充分发挥计算资源,就要对计算问题进行分解,最好能把问题域分解成若干个可以并行执行的任务,这样就可以委派线程,使他们能充分利用多核的优势来加快计算。

2、分享您在Java虚拟机或其他程序设计中并发编程的小技巧。
答:在Java中建立线程有两种方法:一种是继承Thread类,另一种是实现Runnable接口,并通过Thread和实现Runnable的类来建立线程。其实这两种方法从本质上说是一种方法,即都是通过Thread类来建立线程,并运行run方法的。但它们的区别是通过继承Thread类来建立线程,虽然在实现起来更容易,但由于Java不支持多继承,因此,这个线程类如果继承了Thread,就不能再继承其他的类了;因此,Java线程模型提供了通过实现Runnable接口的方法来建立线程,这样线程类还可以在必要的时候继承和业务有关的类。

3、抛开程序语言层面,谈谈您对多核和并发编程的看法。
答:如果抛开程序语言层面,来谈多核和并发:应该说,无论那种编程语言都只是计算解决问题的一种方式, 除了语法差异,本质没有什么不同。而要更好、更快的解决问题,需要的是我们对于待解决问题的透彻分析和理解。多核是一种技术进步,而并发是一种提高计算效率的策略,多核的并发才是一种真正的并发,但并发显然带给编程的不只是速度,还有控制复杂度!因此,多核并发需要在合理场景下的合理应用,才有价值。

论坛徽章:
49
15-16赛季CBA联赛之福建
日期:2016-06-22 16:22:002015年亚洲杯之中国
日期:2015-01-23 16:25:12丑牛
日期:2015-01-20 09:39:23未羊
日期:2015-01-14 23:55:57巳蛇
日期:2015-01-06 18:21:36双鱼座
日期:2015-01-02 22:04:33午马
日期:2014-11-25 09:58:35辰龙
日期:2014-11-18 10:40:07寅虎
日期:2014-11-13 22:47:15申猴
日期:2014-10-22 15:29:50摩羯座
日期:2014-08-27 10:49:43辰龙
日期:2014-08-21 10:47:58
9 [报告]
发表于 2013-05-22 15:31 |只看该作者
hbsycw 发表于 2013-05-22 15:17
好话题,积极参与下:

1、在Java虚拟机编程中您是否用到硬件多核技术?


感谢参与:)

论坛徽章:
0
10 [报告]
发表于 2013-05-22 22:43 |只看该作者
1.在Java虚拟机编程中您是否用到硬件多核技术?
这个问题肯定毋庸置疑的,现在java应用大部分都利用了多核技术。特别是java服务端应用和一些基础中间件,都在用最优的线程模型最大化利用硬件多核技术。
2.分享您在Java虚拟机或其他程序设计中并发编程的小技巧。
   1)找出程序共享数据访问时锁的最小粒度,例如:使用读写锁,尽量使用原子变量,适当时候使用无锁数据结构.尽量减少并发竞争。
   2)必要时考虑伪内存共享带来性能低下的问题。
   3)在线程比较多的时候需要考虑,线程上线文切换带来的消耗。
   4)在编写复杂的并发程序的时候,选择一个好的并发模型,可能让你避免死锁,线程饿死,等一系列的问题,尝试新的并发模式例如:Communicating Sequential Processes
3.抛开程序语言层面,谈谈您对多核和并发编程的看法。
发展到今天在编写多核程序已经相对以前已经有不少的积累了,各种并发模式和并发框架的兴起,现在编写并发程序相对容易了不少。
要想写好出好的多核应用,必须对多核cpu架构有一定的了解,了解各种并发模式。对各平台提供的并发编程框架能熟练使用。
从现在的go,rust,erlang等语言提供的并发编程模式来,后续可能有更多协程代替线程最为最小在多核cpu调度任务,减少内核和用户态切换,在用户态创建更多协程,轻量级调度并发执行。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP