暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Tomcat 线程池模型

用图说画 2021-01-02
1555

        在JVM中, 所有代码都是运行在线程中,Java的线程操作系统的线程是1对1关系,几种线程映射方式如下:

    

    根据应用实现的不同,Java线程所占用大小也不相同, 一般线程大约占用1-2M内存(可通过Xsss设置), 所以线程资源是比较昂贵的资源, 在一个JVM中, 并行存活的线程数量不能无线扩展,因此了解JVM内线程模型对评估系统各方面能力至关重要。

        在程序运行过程中, 主要消耗两种资源:CPU和IO,计算时使用CPU, IO时释放CPU, 存取数据,一个线程不停在这两种行为间切换。在同步的情况下为了充分利用在IO释放的CPU, 一般都会使用多线程技术。


    Tomcat 作为sevlet容器,初始线程模型如下:          

        不区分IO线程和业务线程, 当所有线程占满后, tomcat拒绝接受新的请求。

    Tomcat 3.0后支持异步的方式, 分离IO线程和业务线程:

这样容器线程池(IO线程)可接受更多的请求, 本身用处不是特别大, 因为业务线程还是同步的方式, 一个请求还是占用一个业务线程, 只不过更框架层面的异步实现提供了更大的灵活性。

    Tomcat 3.1之后支持NIO方式异步处理:

Spring webflux基于这种方式实现:仅有当数据可读或可写的时候, 才真正占用业务线程。

文章转载自用图说画,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论