当前位置: 首页 > news >正文

做网站和做软件wordpress获取分类文章

做网站和做软件,wordpress获取分类文章,做音乐网站要注意什么,四川炜航建筑公司网站转载自https://www.cnblogs.com/imyijie/p/4478074.html Java8 提供了三个我们渴望的重要的功能:Lambdas 、 Stream API、以及接口的默认方法。不过我们很容易滥用它们甚至破坏自己的代码。 今天我们来看看Stream api#xff0c;尤其是 parallel streams。这篇文章概述了其中的…转载自https://www.cnblogs.com/imyijie/p/4478074.html   Java8 提供了三个我们渴望的重要的功能:Lambdas 、 Stream API、以及接口的默认方法。不过我们很容易滥用它们甚至破坏自己的代码。 今天我们来看看Stream api尤其是 parallel streams。这篇文章概述了其中的陷阱。 但是首先让我们看看Stream api备受称赞的原因——并行执行。它通过默认的ForkJoinPool可能提高你的多线程任务的速度。 Parallel Streams 的陷阱 以下是一个使用 parallel streams 完美特性的经典例子。在这个例子中我们想同时查询多个搜索引擎并且获得第一个返回的结果。 1 public static String query(String question) {2 ListString engines new ArrayListString() {{3 add(http://www.google.com/?q);4 add(http://duckduckgo.com/?q);5 add(http://www.bing.com/search?q);6 }};7 // get element as soon as it is available8 OptionalString result engines.stream().parallel().map((base) - {9 String url base question; 10 // open connection and fetch the result 11 return WS.url(url).get(); 12 }).findAny(); 13 return result.get(); 14 }   是不是很棒?但是让我们细思深挖一下背后发生了什么。Parallel streams 被父线程执行并且使用JVM默认的 fork join pool: ForkJoinPool.common().(关于fork join 上面有链接) 然而,这里需要注意的一个重要方面是——查询搜索引擎是一个阻塞操作。所以在某时刻所有线程都会调用get()方法并且在那里等待结果返回。 等等这是我们一开始想要的吗我们是在同一时间等待所有的结果,而不是遍历这个列表按顺序等待每个回答。 然而由于ForkJoinPool workders的存在这样平行的等待相对于使用主线程的等待会产生的一种副作用。现在ForkJoin pool 的实现是:它并不会因为产生了新的workers而抵消掉阻塞的workers。那么在某个时间所有ForkJoinPool.common()的线程都会被用光。 也就是说下一次你调用这个查询方法就可能会在一个时间与其他的parallel stream同时运行而导致第二个任务的性能大大受损。 不过也不要急着去吐槽ForkJoinPool的实现。在不同的情况下你可以给它一个ManagedBlocker实例并且确保它知道在一个阻塞调用中应该什么时候去移除掉卡住的workers。 现在有意思的一点是在一个parallel stream处理中并不一定是阻塞调用会拖延程序的性能。任何被用于映射在一个集合上的长时间运行的函数都会产生同样的问题。 看下面这个例子 1 long a IntStream.range(0, 100).mapToLong(x - { 2 for (int i 0; i 100_000_000; i) { 3 System.out.println(X: i); 4 } 5 return x; 6 }).sum();   这段代码同上面那个网络访问的代码遇到了相同的问题。每个lambda的执行并不是瞬间完成的并且在执行过程中程序中的其他部分将无法访问这些workers。 这意味着任何依赖parallel streams的程序在什么别的东西占用着common ForkJoinPool时将会变得不可预知并且暗藏危机。 那又怎么样我不还是我程序的主人 确实如果你正在写一个其他地方都是单线程的程序并且准确地知道什么时候你应该要使用parallel streams这样的话你可能会觉得这个问题有一点肤浅。然而我们很多人是在处理web应用、各种不同的框架以及重量级应用服务。 一个服务器是怎样被设计成一个可以支持多种独立应用的主机的谁知道呢给你一个可以并行的却不能控制输入的parallel stream(offer you a predictable parallel stream performance if it doesn’t control the inputs) 一种方式是限制ForkJoinPool提供的并行数。可以通过使用-Djava.util.concurrent.ForkJoinPool.common.parallelism1 来限制线程池的大小为1。不再从并行化中得到好处可以杜绝错误的使用它。 另一种方式就是一个被称为工作区的可以让ForkJoinPool平行放置的 parallelStream() 实现。不幸的是现在的JDK还没有实现。 总结 Parallel streams 是无法预测的而且想要正确地使用它有些棘手。几乎任何parallel streams的使用都会影响程序中无关部分的性能而且是一种无法预测的方式。我毫不怀疑有人能够设法去正确有效地使用它们。但是在打出stream.parallel()在我的代码里之前我仍然会仔细思考并且再三地审阅包含它的所有代码。转载于:https://www.cnblogs.com/heroinss/p/10019438.html
http://www.zqtcl.cn/news/904553/

相关文章:

  • 公司网站开发外包公司深圳网站建设sz886
  • 中英文网站建设需要懂英语吗电气网站设计
  • 双语网站用什么程序做新网站如何被网站收录
  • 怎么做视频平台网站想开个小说网站怎么做
  • 网站安全监测预警平台建设成效阐述网络营销策略的内容
  • 网站上的qq如何做悬浮沧州做网站的公司
  • 电子商务网站系统规划报告移动商城 网站建设方法方式
  • 网站建设架构选型引擎seo优
  • 什么电脑做网站前段用网站建设工作人员有哪些职责
  • 网站建设技巧网站建设 总结
  • 有站点网络营销平台搜一下百度
  • 沈阳网站建设找德泰诺wordpress 访客计数器
  • 专业网站建设价格分析企业展示型网站建设方案
  • 东丽做网站公司帮做网站的公司
  • 网站的icon图标做多大验证wordpress
  • html制作音乐网站代码已经买了域名怎么做网站
  • 网站做收付款接口山东专业的制作网站
  • 龙岗建设高端网站如何建立网站会员系统吗
  • 中国建设银行的网站色彩wordpress 图片采集器
  • 渭南做网站价格江西省城乡住房建设部网站
  • 个人网站可以做充值安徽建设厅网站首页
  • 技术支持 东莞网站建设石材小企业网站建设查询
  • 政务公开网站建设的亮点和建议wordpress注册怎么设置密码
  • 外贸有哪些网站成都网络营销搜索推广优势
  • 国外mod大型网站财税公司
  • 一个很好的个人网站开发做一个简单网页多少钱
  • 东莞在哪里学网站建设网站建设团队与分工
  • 网站功能插件昆明网站建设技术研发中心
  • 网站开发培训中心 市桥移动端ui
  • 高碑店地区网站建设上海排名十大装潢公司