​在Java里如何减少线程上下文切换?

对于单个java应用来说,减少线程上下文切换发生在多线程环境。题主问如何减少线程上下文切换,那么我们要环绕这几个问题讨论下。一,你的应用是cpu密集型还是io密集型?如果你的系统为cpu计算密集型,单个线程的cpu时间片越大越好,这就要求你对线程池的线程数做限制,防止过多线程对资源进行抢夺。二,你给系统判定的并发上限是多少?每个系统的性能都有上限,过大的负载,会造成性能低下,过小会浪费系统资源,所以需要结合业务得到一个最优值。

三,你的系统架构是否做了优化?你的系统是否能横向扩展,尽量在网关,代理层进行流量转发,通过一定的负载均衡算法来降低单个系统的请求量。服务器的并发模型很重要,是一线程一请求,还是IO多路复用,还是异步模型,一线程一请求,在并发量大时,势必会造成线程切换频繁。四,程序是否业务可以优化?有些场景,优化业务,可以减少程序的处理性能,降低事务的处理时间,是否有cpu轮询,是否在复杂业务中大量使用CAS等等。


文章TAG:
下一篇