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

单位举报网站建设维护情况报告WordPress内网外网访问

单位举报网站建设维护情况报告,WordPress内网外网访问,网站建设军成,网站建设流程六个步骤特性官方文档: https://openjdk.org/jeps/436 Java协程 近三十年来#xff0c;Java 开发人员一直依赖线程作为并发服务器应用程序的构建块。每个方法中的每个语句都在线程内执行#xff0c;并且由于 Java 是多线程的#xff0c;因此多个执行线程同时发生。线程是Java的并发… 特性官方文档: https://openjdk.org/jeps/436 Java协程 近三十年来Java 开发人员一直依赖线程作为并发服务器应用程序的构建块。每个方法中的每个语句都在线程内执行并且由于 Java 是多线程的因此多个执行线程同时发生。线程是Java的并发单位一段与其他此类单元同时运行且在很大程度上独立于其他此类单元的顺序代码。每个线程都提供一个堆栈来存储局部变量和协调方法调用以及出错时的上下文异常是由同一线程中的方法抛出和捕获的因此开发人员可以使用线程的堆栈跟踪来找出发生了什么。线程也是工具的核心概念调试器逐步执行线程方法中的语句分析器可视化多个线程的行为以帮助了解它们的性能。 Why thread-per-request 风格 每一个请求一个线程跟容易理解、易于编程、易于调试和分析;线程很大程度决定了并发,但线程无法无限增长,线程的摧毁建立切换耗时长; 使用异步风格提高可扩展性 IO操作更多的时候复用线程才能高效利用线程颗粒度更小但是处理一个请求使用多个线程交替-栈追踪不行调试器不发处理 虚拟线程的含义 便宜又充足不用被池化创建线程的代价变小虚拟线程保留了可靠的 thread-per-request 风格非常适合IO密集型 案例代码 案例一 轻松创建10000个线程 如果使用传统方案创建10000个线程会大概率崩溃协程每秒处理10000个任务 try (var executor Executors.newVirtualThreadPerTaskExecutor()) {IntStream.range(0, 10_000).forEach(i - {executor.submit(() - {Thread.sleep(Duration.ofSeconds(1));return i;});}); } // executor.close() is called implicitly, and waits案例二 io密集型的操作性能损耗更小,系统更加高效 void handle(Request request, Response response) {var url1 ...var url2 ...try (var executor Executors.newVirtualThreadPerTaskExecutor()) {var future1 executor.submit(() - fetchURL(url1));var future2 executor.submit(() - fetchURL(url2));response.send(future1.get() future2.get());} catch (ExecutionException | InterruptedException e) {response.fail(e);} }String fetchURL(URL url) throws IOException {try (var in url.openStream()) {return new String(in.readAllBytes(), StandardCharsets.UTF_8);} }详解 独立的调度系统 线程需要被调度即分配给在处理器内核上执行。对于作为操作系统线程实现的平台线程JDK 依赖于操作系统中的调度程序。 虚拟线程JDK 有自己的调度程序。JDK 的调度器不是直接将虚拟线程分配给处理器而是将虚拟线程分配给平台线程,平台线程然后像往常一样由操作系统调度。 JDK 的虚拟线程调度程序是一种ForkJoinPool以 FIFO 模式运行的工作窃取。调度程序的并行度是可用于调度虚拟线程的平台线程数。默认情况下它等于可用处理器的数量但可以使用系统属性对其进行调整jdk.virtualThreadScheduler.parallelism。 也就是说,它默认并不是只基于一个线程,在一个线程上创建虚拟线程,而是处理器数量的基础线程数上创建虚拟线程 虽然可能在不同的线程但被屏蔽了运行中获取的Thread.currentThread()始终是虚拟线程, 栈也与实际线程无关 执行虚拟线程 JDK 中的绝大多数阻塞操作都会卸载虚拟线程释放它的载体和底层 OS 线程来承担新的工作。然而JDK 中的一些阻塞操作并没有卸载虚拟线程从而阻塞了它的载体和底层 OS 线程。这是因为操作系统级别例如许多文件系统操作或 JDK 级别例如Object.wait()的限制。这些阻塞操作的实现将通过临时扩展调度程序的并行性来补偿操作系统线程的捕获。因此调度程序中的平台线程数ForkJoinPool可能会暂时超过可用处理器的数量。可以使用系统属性调整调度程序可用的最大平台线程数jdk.virtualThreadScheduler.maxPoolSize。 有两种情况下虚拟线程无法在阻塞操作期间卸载因为它被固定到其载体 当它在块或方法内执行代码时synchronized或者当它执行一个native方法或一个外部函数时。 在案例中[10000次睡眠]执行结果可以预见的是不会阻塞或挂起线程,如果挂起线程可能就会出现睡眠10000秒的情况 也就是说这种阻塞操作会卸载虚拟线程(释放资源)执行其他; 也就是说有些操作会阻止虚拟线程的释放(不释放虚拟线程就会一直占用一个实际线程),从而导致虚拟线程的实际线程池超出上面说的核心数量, 比如调用native方法和Synchronized,; 初步测试下来waitSynchronized是不会阻止卸载的 内存使用和与垃圾回收的交互 虚拟线程的堆栈作为堆栈块对象存储在 Java 的垃圾收集堆中。堆栈随着应用程序的运行而增长和收缩既要提高内存效率又要适应任意深度的堆栈直到 JVM 配置的平台线程堆栈大小。这种效率使大量虚拟线程成为可能从而使服务器应用程序中每个请求线程样式的持续生存能力得以实现。 虚拟线程所需的栈帧布局比紧凑对象更浪费虚拟线程不是GC根(也就是不是长活跃对象),所以只要没有被引用就会被回收虚拟线程的堆栈达到区域大小的一半可能小至 512KB则StackOverflowError可能会抛出 核心: vs协程 核心区别 协程是基于一个线程,而虚拟线程是基于多个线程虚拟线程需要注意多线程之间的同步可见性问题, 协程基于单线程不需要注意 优势 基于多线程虽然要考虑多线的同步和可见性问题,但带了的是更高的性能水平
http://www.dnsts.com.cn/news/262988.html

相关文章:

  • 建设银行交罚款网站郑州西区做网站
  • 用python做网站怎么赚钱广东网站设计专业团队
  • 图片做视频在线观看网站app开发网站开发
  • 佛山网站制作的公司营销型网站的建站步骤是什么意思
  • 自学做网站可以嘛建设网站的公司的官网
  • 山西响应式网站建设设计wordpress显示一个类目
  • 响应式网站设计的优点网站克隆镜像做关键字seo
  • 网站上传网站后台栏目
  • 门户网站开发是什么网站集约化建设的好处
  • 深圳网站开发招聘我请网络公司做的网站上的图片被当广告拦截了_怎么回事
  • 企业培训公司有哪些seo常用工具包括
  • 设计公司网站时什么是重要的大学网站开发与管理课程心得体会
  • 什么是网站的用户体验网站备案用户名忘了怎么办
  • id创建网站中国建设工程信息网官网清欠
  • 网站地址解析资讯门户网站 dede
  • 仿新浪全站网站源码花卉网站源码
  • 网站设计哪个好百度推广助手
  • 闵行工程建设网站网站网页设计工作内容
  • 网站建设知识学习心得山东网站备案号
  • 华为建站wordpress网络搜索优化
  • 为什么国外网站有时打不开成都工程网站建设
  • 做网站 包含详情页设计吗企业管理咨询服务协议
  • 为什么要建设企业网站河北婚庆网站建设定制
  • 做网站你给推广app推广活动策划方案
  • 企业网站建设的提案seo公司多少钱
  • 唐山网站从哪里找注册公司流程和费用l
  • 自己做网站上传相册wordpress数据库配置文件路径
  • php网站的后台地址福田做网站哪家专业
  • 地信的网站建设wordpress反斜杠安装
  • 镇江网站建设开发河南app网站建设