用Java去写server端应用的时有很多框架,如Tom Kate后面可能会有JPA、Hibernate ORM 、JDBC等组件是通过一个NIO接收请求,接收到请求以后是交到一个thread pool,thread pool多线程可能并不是一种特别高效的处理并发的模型,下图可以看到一个g2e的规范,在thread的规范里面,一个外部容器怎样去处理并发的请求是通过在多线程里面去并行的调用service函数来达到的,标准导致这个事件必须通过线程池来提供并发能力。
线程多会导致的问题,上图是一张实际的执行图,每一个竖条代表一个线程,每一个色块代表一个请求,如在只有一个核的机器上去启动4个线程,其实操作系统提供能力,会觉得请求是并发并行来执行的,实际上都是交替的执行分时复用的,看起来是并发的,实际是交替来执行,这中间就有一个切换开销是比较大的,是多线程的一个弊端。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。