仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 688|回复: 10
打印 上一主题 下一主题

[学习教程] JAVA网站制作之Java 8并行操纵的功能剖析仓酷云

[复制链接]
分手快乐 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:19:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
你总不能说你写框架吧,那无疑会加大工作量,现在大多企业采取的是折中的办法,就是改别人写好的框架,可要改框架,前提是你对这个框架足够的了解,这就更难了。二心多用是我的特长好戏。当我在写这篇博客的时分,我还在为今天聚首上说过的话感应为难,事先人人看我跟看怪物一样。好吧,不外所幸的是我其实不孑立——Java8它也很善于这口。来看下它是怎样回事。
Java8中一个关头的新特征就是它撑持并行数组操纵。你可使用lambda表达式来举行排序,过滤,分组等操纵,它能主动的发扬多核架构的上风。带来的优点就是作为一位Java开辟职员,你只需很小的事情量就能够立马取得功能的提拔。相称酷的功效。
那末成绩来了——它究竟能有多快,我该在甚么时分利用它?谜底大概会让人有些扫兴——这得详细情形详细剖析。想晓得决意要素是甚么吗?持续往下看就晓得了。
新的API

Java8的新的并行操纵的API十分奇妙。我们来看下筹办举行测试的几个接口:

  • 经由过程这个接口能够发扬多处置器的上风举行并行的数组排序:
  1. Arrays.parallelSort(numbers);
复制代码

  • 依据指定的前提(好比是否是素数)对汇合举行分组——
  1. Map<Boolean,List<Integer>>groupByPrimary=numbers.parallelStream().collect(Collectors.groupingBy(s->Utility.isPrime(s)));
复制代码

  • 过滤出你想要的值:
  1. Integer[]prims=numbers.parallelStream().filter(s->Utility.isPrime(s)).toArray();
复制代码
看看这个,再想一想假如你本人用多线程来完成的话。开辟效力刹时进步了有木有!这个新布局我团体对照喜好的人一点是它的支解迭代器(Spliterator)的观点,它将一个方针汇合分开成分歧的块,这些块能够并行的举行处置,然后再兼并到一同。跟它的先辈迭代器那样,它能够遍历一个汇合,同时这个架构十分天真,你能够自界说遍历和分开汇合的操纵,并间接传进办法便可。
它的功能体现怎样?

我经由过程两个场景来举行并行操纵的功能测试——低合作和高合作的情形。缘故原由在于假如你间接运转某个多核运算的算法的话,了局一般城市十分不错。但假如在一个实在的情况中运转的话,成绩就呈现了。实在情况下有大批的线程在一直的争取可贵的CPU资本举行动静大概用户哀求的处置。这就是功能变差的缘故原由。为了测试这类情形我举行了以下的测试。随机天生长度为10万的整型数组,取值在0到100万之间。然后分离利用传统的体例和并行的体例举行排序,分组和过滤操纵。了局在我们的意料当中。

  • 快排的功能快了4.7倍。
  • 分组的功能快了5倍摆布。
  • 过滤的功能快了5.5.倍。
了局还算中意?固然不是。

我厥后又做了一个分外的测试,将上述程序反复实行了100次,了局也是一样的。测试的呆板是i7处置器的MacBookPro。
高负载下的情形怎样?

今朝为止了局还算不错,这是因为CPU资本的合作其实不剧烈。这是幻想情形下的了局,不外不幸的是,实际情况中可没有这么幻想。为了摹拟实际情况中的场景我写了第二个测试用例。这个测试运转的是一样的程序,分歧的是此次有10个线程在并发的实行,来摹拟并行处置10个哀求的情形。每一个哀求都经由过程传统的串行体例和新的并行的体例来举行处置。
了局



  • 排序快了20%——功能下降了23倍
  • 过滤快了20%——功能下降了25倍
  • 分组慢了15%。
合作抵触更严峻的情形下功能差异一定还会持续加年夜。缘故原由在于,在多线程情况下,增添线程来举行处置实际上是于事无补的。只要当CPU越多的情形下功能才会越好——线程多则杯水车薪。


对于一个大型项目,如果用java来作,可能需要9个月,并且可能需要翻阅10本以上的书,但如果用ruby来作,3个月,3本书就足够了,而.net网页编程也不过3,4本书足以,这就是区别。
分手快乐 该用户已被删除
沙发
 楼主| 发表于 2015-1-20 20:10:45 | 只看该作者
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
飘飘悠悠 该用户已被删除
板凳
发表于 2015-1-29 20:13:56 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
老尸 该用户已被删除
地板
发表于 2015-1-30 22:54:37 | 只看该作者
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
若天明 该用户已被删除
5#
发表于 2015-2-2 21:54:46 来自手机 | 只看该作者
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
柔情似水 该用户已被删除
6#
发表于 2015-2-7 02:27:11 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
简单生活 该用户已被删除
7#
发表于 2015-2-19 21:07:00 | 只看该作者
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
再见西城 该用户已被删除
8#
发表于 2015-3-6 15:26:06 | 只看该作者
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
金色的骷髅 该用户已被删除
9#
发表于 2015-3-8 04:42:48 | 只看该作者
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
乐观 该用户已被删除
10#
发表于 2015-3-11 15:49:30 | 只看该作者
是一种为 Internet发展的计算机语言
深爱那片海 该用户已被删除
11#
发表于 2015-3-18 23:38:37 | 只看该作者
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-15 12:06

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表