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

专门做衣服的网站uniapp开源商城源码

专门做衣服的网站,uniapp开源商城源码,宜宾微信网站建设,北京做网站便宜的公司哪家好为什么非阻塞io性能更好1.简介 想象一下#xff0c;我们有一个需要访问外部Web服务的应用程序#xff0c;以便收集有关客户端的信息#xff0c;然后对其进行处理。 更具体地说#xff0c;我们无法在一次调用中获得所有这些信息。 如果我们要查找不同的客户端#xff0c;则… 为什么非阻塞io性能更好 1.简介 想象一下我们有一个需要访问外部Web服务的应用程序以便收集有关客户端的信息然后对其进行处理。 更具体地说我们无法在一次调用中获得所有这些信息。 如果我们要查找不同的客户端则需要多次调用。 如下图所示该示例应用程序将检索有关多个客户的信息将它们分组在一个列表中然后对其进行处理以计算其购买总额 在这篇文章中我们将看到收集信息的不同方法并且从性能方面来看哪一种是最好的。 这是与Java相关的文章。 但是我们将使用Spring框架来调用RESTful Web服务。 栏目 介绍 解释例子 首次尝试顺序流 提高性能并行流 具有CompletableFuture的非阻塞处理 结论 可以在Java 8 GitHub存储库中找到源代码。 此外您可以访问此存储库中公开RESTful Web服务的Web应用程序的源代码。 2.解释示例 在我们的应用程序中我们有20个ID的列表这些ID表示我们要从Web服务检索的客户端。 检索完所有客户之后我们将查看每个客户购买了什么并对它们进行汇总以计算出所有客户花费的总金额。 但是有一个问题该Web服务每次调用仅允许检索一个客户端因此我们将需要调用该服务20次。 此外Web服务有点慢至少需要两秒钟才能响应请求。 如果我们看一下实现Web服务的应用程序我们可以看到调用是由ClientController类处理的 RestController RequestMapping(value/clients) public class ClientController {Autowiredprivate ClientService service;RequestMapping(value/{clientId}, method RequestMethod.GET)public ResponseBody Client getClientWithDelay(PathVariable String clientId) throws InterruptedException {Thread.sleep(2000);Client client service.getClient(clientId);System.out.println(Returning client client.getId());return client;} } Thread.sleep用于模拟响应速度慢。 域类客户包含我们需要的信息 客户花了多少钱 public class Client implements Serializable {private static final long serialVersionUID -6358742378177948329L;private String id;private double purchases;public Client() {}public Client(String id, double purchases) {this.id id;this.purchases purchases;}//Getters and setters }3.首次尝试顺序流 在第一个示例中我们将顺序调用服务以获取所有二十个客户端的信息 public class SequentialStreamProcessing {private final ServiceInvoker serviceInvoker;public SequentialStreamProcessing() {this.serviceInvoker new ServiceInvoker();}public static void main(String[] args) {new SequentialStreamProcessing().start();}private void start() {ListString ids Arrays.asList(C01, C02, C03, C04, C05, C06, C07, C08, C09, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C20);long startTime System.nanoTime();double totalPurchases ids.stream().map(id - serviceInvoker.invoke(id)).collect(summingDouble(Client::getPurchases));long endTime (System.nanoTime() - startTime) / 1_000_000;System.out.println(Sequential | Total time: endTime ms);System.out.println(Total purchases: totalPurchases);} } 输出 Sequential | Total time: 42284 ms Total purchases: 20.0 该程序的执行大约需要42秒。 这是太多时间。 让我们看看是否可以改善其性能。 4.提高性能并行流 Java 8允许我们将流分成多个块并在单独的线程中处理每个流。 我们需要做的就是简单地在上一个示例中将流创建为并行流。 您应考虑到每个块将在其线程中异步执行因此处理这些块的顺序一定无关紧要。 在我们的案例中我们正在汇总购买量因此我们可以做到。 让我们尝试一下 private void start() {ListString ids Arrays.asList(C01, C02, C03, C04, C05, C06, C07, C08, C09, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C20);long startTime System.nanoTime();double totalPurchases ids.parallelStream().map(id - serviceInvoker.invoke(id)).collect(summingDouble(Client::getPurchases));long endTime (System.nanoTime() - startTime) / 1_000_000;System.out.println(Parallel | Total time: endTime ms);System.out.println(Total purchases: totalPurchases); } 输出 Parallel | Total time: 6336 ms Total purchases: 20.0 哇这是一个很大的进步 但是这个数字是什么来的呢 并行流在内部使用ForkJoinPool它是Java 7中引入的ForkJoin框架所使用的池。默认情况下该池使用与计算机处理器可以处理的线程数相同的线程。 我的笔记本电脑是可以处理8个线程的四核您可以通过调用Runtime.getRuntime.availableProcessors进行检查因此它可以并行地对Web服务进行8次调用。 由于我们需要20次调用因此至少需要3次“回合” 好的所以从40秒到6秒是一个不错的改进但是我们还能进一步改进吗 答案是肯定的。 5.使用CompletableFuture进行非阻塞处理 让我们分析先前的解决方案。 我们发送8个线程来调用每个Web服务但是当该服务正在处理请求时整整两秒钟我们的处理器除了等待外什么也不做这是IO操作。 在这些请求不回来之前我们将无法发送更多请求。 问题是如果我们可以异步发送所有20个请求释放处理器并在可用时处理每个响应该怎么办 这是CompletableFuture抢救的地方 public class AsyncStreamExecutorProcessing {private final ServiceInvoker serviceInvoker;private final ExecutorService executorService Executors.newFixedThreadPool(100);public AsyncStreamExecutorProcessing() {this.serviceInvoker new ServiceInvoker();}public static void main(String[] args) {new AsyncStreamExecutorProcessing().start();}private void start() {ListString ids Arrays.asList(C01, C02, C03, C04, C05, C06, C07, C08, C09, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C20);long startTime System.nanoTime();ListCompletableFutureClient futureRequests ids.stream().map(id - CompletableFuture.supplyAsync(() - serviceInvoker.invoke(id), executorService)).collect(toList());double totalPurchases futureRequests.stream().map(CompletableFuture::join).collect(summingDouble(Client::getPurchases));long endTime (System.nanoTime() - startTime) / 1_000_000;System.out.println(Async with executor | Total time: endTime ms);System.out.println(Total purchases: totalPurchases);executorService.shutdown();} } 输出 Async with executor | Total time: 2192 ms Total purchases: 20.0 在上一个示例中花费了三分之一的时间。 我们同时发送了所有20个请求因此在IO操作上花费的时间仅花费了一次。 收到回复后我们会Swift对其进行处理。 使用执行程序服务很重要它被设置为supplyAsync方法的可选第二个参数。 我们指定了一个包含一百个线程的池因此我们可以同时发送100个请求。 如果我们不指定执行者则默认情况下将使用ForkJoin池。 您可以尝试删除执行程序您将看到与并行示例相同的性能。 六结论 我们已经看到当执行不涉及计算的操作例如IO操作时我们可以使用CompletableFuture类来利用我们的处理器并提高应用程序的性能。 翻译自: https://www.javacodegeeks.com/2015/03/improving-performance-non-blocking-processing-of-streams.html为什么非阻塞io性能更好
http://wiki.neutronadmin.com/news/47812/

相关文章:

  • 中建西部建设西南有限公司网站nas服务器可以做网站吗
  • 手机网站 图片自适应目前做系统比较好的网站
  • 图片网站怎么做排名昆明网站建设织梦
  • 企业建网站的步骤iis网站权限
  • 常平做网站费用
  • 教育培训机构招生网站建设三线建设网站
  • 网站建设get你推广淘特一个新人多少钱
  • 扬州建设教育信息网站微信app下载最新版本
  • 网站建设的技术亮点汉阳做网站
  • 浦东新区专业网站建设小程序推广赚佣金平台
  • 定制网站开发多少钱织梦网站内部优化
  • 网站建设维护方案最新手机发布会
  • 论坛网站免费建设模板下载安装大数据培训班出来能就业吗
  • 网站没有备案用什么cdnwordpress添加爬虫数据
  • 仟亿家设计软件好吗亿家搜索排名优化网站排名优化
  • 网站开发工具的免费企业建站开源系统
  • 电子 网站模板网络营销讲师培训
  • 怀化 网站建设申请网站建设经费的报告
  • 网站链接做投票wordpress 电影站主题
  • 郴州企业网站建设制作中国企业网中国商报
  • les做ml网站用自己电脑做网站空间
  • 12306网站谁做的10个免费的黑科技网站
  • 建站与备案的具体流程是什么软件工程师需要什么学历
  • 帝国cms如何做网站厦门中标工程信息网
  • 跑腿网站建设赣州做网站优化
  • 个人网站每年要多少钱17货源网一件代发
  • 哈尔滨红军街67号营口seo
  • 电商网站建设优缺点电信网站备案查询系统
  • 昆明行业网站建设网站设计培训
  • 科技公司网站设计风格用淘宝评论做网站