OSC 第 101 期高手问答 —— Java 高并发程序设计

叶秀兰 发布于 2015/12/01 11:31
阅读 12K+
收藏 66

OSCHINA 本期高手问答(12月02日- 12月08日)我们请来了《实战Java高并发程序设计》的作者 @葛一鸣 为大家解答关于 Java 的并行程序设计基础、思路、方法和实战 方面的问题。如:

  • 现在的服务器 CPU 可能多达 10 个以上的内核,并发编程市场需求量激增,如何才能将多核 CPU 的性能发挥到极致呢?
  • Java 作为服务端编程使用最广泛的语言,必然需要和多核 CPU 打交道,那 Java 为我们提供了哪些并发编程的工具?

葛一鸣, 浙江工业大学硕士,国家认证系统分析师,获得 Oracle OCP 认证。长期从事 Java 软件开发,对 Java 程序设计,JVM 有比较深的研究。对设计模式、人工智能、神经网络、数据挖掘等技术有浓厚兴趣,著有《实战Java虚拟机——JVM故障诊断与性能优化》纸书和《自己动手写神经网路》电子书,力求用 Java 改变世界。

《实战Java高并发程序设计》尽量避免采用过于理论的描述方式,简单的白话文风格贯穿全书,配图基本上为手工绘制,降低了理解难度,并尽量做到读者在阅读过程中少盲点、无盲点。

为了鼓励踊跃提问,@吴小编 会在问答结束后从提问者中抽取 5 名幸运会员赠予《实战Java高并发程序设计》一书。

样章试读:http://www.oschina.net/doc/23453

购买链接
京东:http://item.jd.com/11800589.html

亚马逊:http://t.cn/RUe6XfN

高手问答一贯的风格,不欢迎任何与主题无关的讨论和喷子。

下面欢迎大家就 Java 并发方面问题向@葛一鸣 提问,请直接回帖提问。

加载中
0
吴小编
吴小编

请中奖的@Ambitor @-悟空- @Li_Peng @采飞扬 @xpbob  私信我地址和联系方式吧,图书马上送出。


叶秀兰
叶秀兰
回复 @-悟空- : 书籍已经寄出:)
叶秀兰
叶秀兰
回复 @-悟空- : 估计还没那么快,出版社那边直接邮寄,流程比较慢
-悟空-
-悟空-
回复 @叶秀兰 : 你好 请问具体什么时候邮寄呢?
-悟空-
-悟空-
@吴小编 哈哈,中奖啦13
Ambitor
Ambitor
哇塞,好兴奋,好开心,哈哈 谢谢 老板们~~一定好好看完 并且撰写博文宣传~~!
下一页
2
西夏一品堂
西夏一品堂
@葛一鸣 :经常碰到类似的面试题:服务器同一时刻最多接收1000个请求,现在一下来了2000个,如何处理
葛一鸣
葛一鸣
缓存可以使用一些过期机制,尽可能不要溢出。还有就是可以使用类似软引用 弱引用做不太重要的缓存。
杨延庆
杨延庆
回复 @葛一鸣 : 缓存区爆掉,怎么处理?用什么样的抛弃策略?
葛一鸣
葛一鸣
可以用生产者消费者模式,先放在一个缓冲区中
2
平西王
平西王
@葛一鸣 : 在一般的程序中,会使用多线程提高效率,应付高并发,但是,多线程会有额外的开销、锁、和一些其他的副作用,这样就会无形之中影响了高并发。请问,在多线程、高并发直接如何权衡他们
葛一鸣
葛一鸣
线程数量要合理。减少线程之间的竞争,还有,就是可以使用无锁。对于热点数据,还可以进行热点分离
1
西夏一品堂
西夏一品堂

@葛一鸣 :

一般在新上了一个项目的时候,会调整一些JVM的内存参数,服务器也会调整一些线程数、最大连接数等等。

为了最大限度的发挥性能,提高并发性能,请问,如何把这些参数调整到一个最合适的值,有哪些经验可以借鉴
葛一鸣
葛一鸣
这个得根据硬件进行尝试。调优就是一步一步慢慢尝试。
0
烤猪佩奇
烤猪佩奇
@葛一鸣 : 请教下如何根据服务器配置或者说应用程序的特性来确定某个任务跑多少个线程合适?谢啦
葛一鸣
葛一鸣
这个需要根据应用程序的特点开确定。采用什么样的硬件,也应该根据应用的特点
0
Li_Peng
Li_Peng
@葛一鸣 : 你好,我想请教一下,我们现在自己开发了一个Java后台程序,用于接收iOS和Android移动端的向后台发送用户行为信息,进行数据的采集和分析。目前,预计在业务发展的初期,后台每秒的并发量大概在2000左右。我想咨询的是采用Java开发,应对上述并发场景,是使用Java的NIO方式来开发,还是采用Akka方式比较好一些。目前后台服务器可能只有一台,如果要进行横向扩展的话,是不是Akka的方式对分布式支持更好一些?谢谢!
浪子一号
浪子一号
回复 @Li_Peng : 我知道。你的场景我做过。我的意思你直接读取参数放到队列服务器就可以了。简单,粗暴。直接读取参数我想这样的程序的扩张很容易的。至于实现,akka也好,线程也好。我估计都很比较容易处理。
莫回头
莫回头
他的意思是先快速接收消息,放到队列中不直接做处理,而是立刻返回或者其他消费者去调用,异步处理
Li_Peng
Li_Peng
回复 @浪子一号 : 手机app端发回的数据是http或者tcp协议返回,没办法直接进入redis、strom、spark里面,需要前端有一个接收数据的java程序,然后由这个java程序将数据再写入后端的存储中。
浪子一号
浪子一号
回复 @zigzagroad : 你的需求有很多种方案满足。简单点就可以直接使用一个队列服务器例如,beanstalkd,redis等使用。或者可以直接使用storm。spark等实时分析
zigzagroad
zigzagroad
貌似你的这个需求 加上处理队列和异步线程 就可以了
0
巴拉迪维
巴拉迪维

@葛一鸣 : 请教几个问题:

1、当下多核的服务器比比皆是,作为开发人员,从代码角度考虑,有什么需要的地方?

2、多核环境下多线程之间的「锁问题」处理 与 单核环境下的情况有何异同?

3、Java8中的更并发相关的改进,其优势体现在哪些地方?

谢谢

葛一鸣
葛一鸣
代码层面的注意点太多,很难简短回答,实际上整本书都在试图回答这个问题。 单核没有正真的并发。 java8提供了一些性能更好的,为并发优化的工具类
0
iehyou
iehyou
mark下 多线程运用的比较少,只是做过几个生产消费模式的需求。
0
小小阿伟
@葛一鸣 :你好,在并发处理中锁的使用有啥经验没有?
FoxHu
FoxHu
回复 @葛一鸣 : 学习了
葛一鸣
葛一鸣
并发量很高的时候,需要尽可能优化,比如书中提到的,热点分离,无锁等技术手段
0
腾讯公告
腾讯公告
@葛一鸣 :如何才能应对阶段性高并发?比如一般平时并发访问比较均衡,一到晚上8-12点并发量一下子翻了四五倍,这种情况要怎么应对?
葛一鸣
葛一鸣
系统的设计应该要可以承受压力峰值。除了优化代码外,看看能不能把一些好时的操作在系统空闲时做掉,形成可用的缓存?
返回顶部
顶部