【练技术】如何通过精研线程模型,cpu调度,内存模型等性能优化核心?

2024-01-12 01:18

本文主要是介绍【练技术】如何通过精研线程模型,cpu调度,内存模型等性能优化核心?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

性能优化无非就是线程,cpu调度,以及内存之间的配合,这三者中任何一个达到极限,都会造成系统整体性能下降,甚至瘫痪。

线程必然要由cpu调度才能活动起来,那么线程的活动也必须有自己的地盘,那么这个地盘就是内存区域。线程数越多,需要cpu的调度能力越强,需要的内存也就越大,那么线程不可能无限增大,总有个极限,当到达极限之后,系统性能将呈现抛物线形的状态急转往下。

所以我们必须不能让cpu等资源达到这个极限值,一般在85%左右就可以了。intel的工程师曾今说过,我们为什么要让cpu达到100%的性能呢,能够让他发挥到80%-85%就已经很完美了。

那么线程模型也是掣肘性能的一个重要因素,NIO优于BIO,reactor模型又是NIO模型的最佳实践,proactor模型又优于reactor模型。这些线程模型都是值得我们去深入研究的。

每种线程模型都有实际的产品落地,比如早期的tomcat就是BIO模型的,后来NIO起来之后,netty,redis等都基于reactor实现了相对不错的性能。proactor模式又落地到tomcat的NIO2通道中。这些都是优秀的线程模型的实现案例。

java领域里面,内存模型的研究的终极目标是如何更有效率的回收垃圾,从jdk迭代的版本我们可以看出jvm工程师在这方面的努力,在【jvm调优-GC篇】里我们着重讲了各种垃圾收集算法以及产品的落地,从最初的串行垃圾收集器到当前性能最好的G1垃圾收集器,这些都凝聚jvm工程师的心血。

在内存领域,各路大牛可谓都是绞尽脑汁的琢磨各种方案,也取得了一些成效,比如“零拷贝”,这个技术用在各大组件中,nginx,netty,kafka等组件里都有他的影子。他的理念就是干脆跨过堆内存,直接走内核,这样就没gc啥事了。

所以我们调优要做到心中有数,你究竟要调什么?究竟是线程模型呢,还是cpu调度呢,还是内存gc回收呢?针对不同的部分都有成熟的方案可选,不要盲目的去调优。

更多调优研习参考:https://docs.qq.com/doc/DQnVueFhibEF4eEha

这篇关于【练技术】如何通过精研线程模型,cpu调度,内存模型等性能优化核心?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/596335

相关文章

Python列表去重的4种核心方法与实战指南详解

《Python列表去重的4种核心方法与实战指南详解》在Python开发中,处理列表数据时经常需要去除重复元素,本文将详细介绍4种最实用的列表去重方法,有需要的小伙伴可以根据自己的需要进行选择... 目录方法1:集合(set)去重法(最快速)方法2:顺序遍历法(保持顺序)方法3:副本删除法(原地修改)方法4:

在Spring Boot中浅尝内存泄漏的实战记录

《在SpringBoot中浅尝内存泄漏的实战记录》本文给大家分享在SpringBoot中浅尝内存泄漏的实战记录,结合实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录使用静态集合持有对象引用,阻止GC回收关键点:可执行代码:验证:1,运行程序(启动时添加JVM参数限制堆大小):2,访问 htt

SpringQuartz定时任务核心组件JobDetail与Trigger配置

《SpringQuartz定时任务核心组件JobDetail与Trigger配置》Spring框架与Quartz调度器的集成提供了强大而灵活的定时任务解决方案,本文主要介绍了SpringQuartz定... 目录引言一、Spring Quartz基础架构1.1 核心组件概述1.2 Spring集成优势二、J

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

SpringBoot首笔交易慢问题排查与优化方案

《SpringBoot首笔交易慢问题排查与优化方案》在我们的微服务项目中,遇到这样的问题:应用启动后,第一笔交易响应耗时高达4、5秒,而后续请求均能在毫秒级完成,这不仅触发监控告警,也极大影响了用户体... 目录问题背景排查步骤1. 日志分析2. 性能工具定位优化方案:提前预热各种资源1. Flowable

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4