发布时间:2022-11-08 文章分类:编程知识 投稿人:王小丽 字号: 默认 | | 超大 打印

欢迎访问我的GitHub

这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos

《支持JDK19虚拟线程的web框架》系列文章链接

本篇概览

  1. 虚拟线程和常规子线程的区别,究竟能不能看出来?前文已经验证了性能上区别不大,那还有别的方式来观察和区分吗?
  2. 能不能稍微深入一点,仅凭一个@RunOnVirtualThread注解就强行写两篇博客,实在是太忽悠人了

设置

支持JDK19虚拟线程的web框架,之三:观察运行中的虚拟线程

准备工作

支持JDK19虚拟线程的web框架,之三:观察运行中的虚拟线程

支持JDK19虚拟线程的web框架,之三:观察运行中的虚拟线程

支持JDK19虚拟线程的web框架,之三:观察运行中的虚拟线程

支持JDK19虚拟线程的web框架,之三:观察运行中的虚拟线程

支持JDK19虚拟线程的web框架,之三:观察运行中的虚拟线程

  1. VTPersonResource.java,该服务类使用了虚拟线程来执行web响应,对应web路径:/vt/persons

  2. PoolPersonResource.java,该服务类未使用虚拟线程,所以执行web响应的是传统线程池中的子线程,对应web路径:/pool/persons

不使用虚拟线程时的线程状况

import http from 'k6/http';
import { sleep, check } from 'k6';
export let options = {
  vus: 10,
  duration: '60s',
};
export default function () {
  let r = Math.floor(Math.random() * 6) + 1;
  const res = http.get(`http://192.168.3.187:8080/pool/persons/${r}`);
  check(res, {
    'is status 200': (res) => res.status === 200,
    'body size is > 0': (r) => r.body.length > 0,
  });
  sleep(1);
}

支持JDK19虚拟线程的web框架,之三:观察运行中的虚拟线程

支持JDK19虚拟线程的web框架,之三:观察运行中的虚拟线程

支持JDK19虚拟线程的web框架,之三:观察运行中的虚拟线程

思考:用JProfiler观察虚拟线程,你到底想收获什么?(本篇精华段落)

支持JDK19虚拟线程的web框架,之三:观察运行中的虚拟线程

支持JDK19虚拟线程的web框架,之三:观察运行中的虚拟线程

  1. ForkJoin线程池啥时候创建的?会不会销毁?
  2. 调度器(scheduler)啥时候创建的?会不会销毁?
  3. carrier啥时候创建的?会不会销毁?

支持JDK19虚拟线程的web框架,之三:观察运行中的虚拟线程

  1. 调度器,scheduler(ForkJoin线程池中的线程)
  2. 执行虚拟线程任务的真实线程,carrier
  3. 虚拟线程

支持JDK19虚拟线程的web框架,之三:观察运行中的虚拟线程

支持JDK19虚拟线程的web框架,之三:观察运行中的虚拟线程

支持JDK19虚拟线程的web框架,之三:观察运行中的虚拟线程

支持JDK19虚拟线程的web框架,之三:观察运行中的虚拟线程

我有个想法

欢迎关注博客园:程序员欣宸

学习路上,你不孤单,欣宸原创一路相伴...