如何为高邮市创建一个自己的国外网站?

摘要:高邮市建设网站,怎样做自己的国外网站,前端刚毕业开多少工资,互联网营销师培训基地本文要点: 为什么需要异步调用CompletableFuture 基本使用RPC 异步调用HTTP 异步调用编排 Completa
高邮市建设网站,怎样做自己的国外网站,前端刚毕业开多少工资,互联网营销师培训基地本文要点#xff1a; 为什么需要异步调用CompletableFuture 基本使用RPC 异步调用HTTP 异步调用编排 CompletableFuture 提高吞吐量BIO 模型 当用户进程调用了recvfrom 这个系统调用#xff0c;kernel 就开始了 IO 的第一个阶段#xff1a;准备数据。对于 network io 来说…本文要点 为什么需要异步调用CompletableFuture 基本使用RPC 异步调用HTTP 异步调用编排 CompletableFuture 提高吞吐量BIO 模型 当用户进程调用了recvfrom 这个系统调用kernel 就开始了 IO 的第一个阶段准备数据。对于 network io 来说很多时候数据在一开始还没有到达比如还没有收到一个完整的UDP包这个时候 kernel 就要等待足够的数据到来。而在用户进程这边整个进程会被阻塞。当 kernel 一直等到数据准备好了它就会将数据从 kernel 中拷贝到用户内存然后 kernel 返回结果用户进程才解除 block 的状态重新运行起来。所以Blocking IO 的特点就是在 IO 执行的两个阶段都被 block 了。 同步调用 在同步调用的场景下依次请求多个接口耗时长、性能差接口响应时长 T T1T2T3……Tn。 减少同步等待 一般这个时候为了减少同步等待时间会使用线程池来同时处理多个任务接口的响应时间就是 MAX(T1,T2,T3) 线程池异步 大概代码如下 FutureString future executorService.submit(() - {Thread.sleep(2000);return hello world; }); while (true) {if (future.isDone()) {System.out.println(future.get());break;} } 同步模型中使用线程池确实能实现异步调用的效果也能压缩同步等待的时间但是也有一些缺陷 CPU 资源大量浪费在阻塞等待上导致 CPU 资源利用率低。为了增加并发度会引入更多额外的线程池随着 CPU 调度线程数的增加会导致更严重的资源争用上下文切换占用 CPU 资源。线程池中的线程都是阻塞的硬件资源无法充分利用系统吞吐量容易达到瓶颈。 NIO 模型 为了解决 BIO 中的缺陷引入 NIO 模型 NIO 模型 当用户进程发出 read 操作时如果 kernel 中的数据还没有准备好那么它并不会 block 用户进程而是立刻返回一个 error。从用户进程角度讲 它发起一个 read 操作后并不需要等待而是马上就得到了一个结果。用户进程判断结果是一个 error 时它就知道数据还没有准备好于是它可以再次发送 read 操作。一旦 kernel 中的数据准备好了并且又再次收到了用户进程的 system call那么它马上就将数据拷贝到了用户内存然后返回。所以用户进程其实是需要不断的主动询问 kernel 数据好了没有。 异步优化思路 我们知道了 NIO 的调用方式比 BIO 好那我们怎么能在业务编码中使用到 NIO 呢自己动手将 BIO 替换成 NIO 肯定不现实已有组件支持 NIO 的可以直接使用不支持的继续使用自定义线程池。 通过 RPC NIO 异步调用、 HTTP 异步调用的方式降低线程数从而降低调度上下文切换开销。没有原生支持 NIO 异步调用的继续使用线程池。引入 CompletableFuture 对业务流程进行编排降低依赖之间的阻塞。 简述CompletableFuture CompletableFuture 是 java.util.concurrent 库在 java 8 中新增的主要工具同传统的 Future 相比其支持流式计算、函数式编程、完成通知、自定义异常处理等很多新的特性 常用 API 举例 supplyAsync CompletableFutureString future CompletableFuture.supplyAsync(()-{ try{Thread.sleep(1000L);return hello world;} catch (Exception e){return failed;} }); System.out.println(future.join()); // output hello world 开启异步任务到另一个线程执行。
阅读全文