面经总结池

一.线程池

1.线程池为什么要动态扩容

线程的创建开销大
线程的创建和销毁本身是有较大系统开销的。如果每来一个任务都新建线程,会频繁消耗CPU和内存资源,影响系统性能。动态扩容可以在任务量增加时适当增加线程数,避免频繁创建销毁线程,提高效率。

线程占用内存较大
每个线程都会占用一定的内存(如栈空间),线程数过多会导致内存消耗大,业务可用内存变少,甚至引发OOM。动态扩容可以根据实际任务量合理控制线程数量,避免内存资源被大量空闲线程占用。

线程的上下文切换开销
线程数过多时,CPU需要频繁进行线程上下文切换,带来额外的性能损耗。动态扩容可以在高并发时适当增加线程数,但不会无限制扩展,避免因线程过多导致的频繁切换,保证系统整体性能。

服务器的锯齿状负载
服务器的负载通常是波动的,有高峰和低谷。固定线程数无法适应负载变化,容易在高峰时处理不过来、低谷时资源浪费。动态扩容可以根据负载变化自动调整线程数,既能应对高峰压力,又能在低谷时节省资源。

2.线程池是怎么实现动态扩容的?

任务队列监控
当有新任务提交到线程池时,如果发现当前所有线程都在忙,且任务队列长度超过一定阈值,线程池就会自动创建新的工作线程,直到达到设定的最大线程数。

线程回收机制
动态扩容的线程在空闲一段时间后(比如通过条件变量等待超时),如果没有新任务,就会自动退出,释放资源,避免线程长期空闲造成资源浪费。

参数配置
一般线程池会设置核心线程数、最大线程数和线程空闲存活时间等参数。线程池会根据任务压力和这些参数动态调整线程数量。

实现方式
在C++中,常见的做法是用std::thread结合任务队列和条件变量实现线程池的动态扩容和回收。也有一些开源库(如ThreadPool、BS::thread_pool等)已经支持动态扩容。

 二.内存池(nginx内存池模块)

1.为什么nginx要设计内存池模块?

nginx高性能的一个关键点是减少内存分配和释放的系统调用次数。内存池可以批量分配和回收内存,降低碎片,提高分配效率,适合nginx这种高并发、短连接的场景。

 2. nginx内存池的基本原理是什么?

nginx内存池会预先分配一块较大的内存区域,后续小块内存分配直接在这块区域上进行,避免频繁调用malloc/free。释放时可以一次性回收整个内存池

3.nginx内存池如何处理大块内存分配? 

对于大于预设阈值(如4K)的内存分配,nginx不会从内存池分配,而是直接调用系统的malloc分配,并单独管理,释放时也单独释放。

4..nginx内存池如何释放内存? 

内存池释放时,不会逐个释放小块内存,而是直接释放整个内存池分配的内存块和所有大块内存,效率很高。

5. nginx内存池如何避免内存碎片? 

通过统一管理和批量分配,nginx内存池可以有效减少内存碎片,提升内存利用率。

6. nginx内存池适合什么场景? 

适合生命周期明确、短时大量分配和释放的场景,比如HTTP请求处理、连接管理等。

 三.连接池(mysql连接池)

1. 为什么要用MySQL连接池?

MySQL连接的建立和释放开销很大,连接池可以复用已有连接,减少频繁创建和销毁连接的性能损耗,提高系统吞吐量。

2. 连接池的核心参数有哪些? 

常见参数有:最小连接数、最大连接数、初始连接数、最大空闲时间、最大等待时间、获取连接超时时间等。

3. 连接池的工作原理是什么? 

应用请求数据库时,从连接池获取空闲连接,用完后归还连接池。没有空闲连接时可等待、阻塞或抛出异常,具体行为由配置决定。

4. 连接池如何处理连接泄漏? 

可以通过设置连接最大使用时长、检测连接归还、定期回收长时间未归还的连接等方式防止连接泄漏。

5. 连接池如何保证连接可用性? 

连接池会定期检测连接的健康状态(如执行简单SQL),发现不可用则销毁并新建连接,保证连接池中都是可用连接。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/89152.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

案例:城市“光革命”背后,塔能科技的智能照明进化方程式

在智慧城市建设中,照明系统的智能化升级成为城市发展的关键一环。塔能科技在河南某市Cat.1智能照明改造项目(一期)里,凭借一系列创新举措脱颖而出,打造出极具标杆意义的智能照明范例。现在,让我们深入探究该…

让 Deepseek 写电器电费计算器(html版本)

以下是一个简单的电器电费计算器的HTML和CSS代码&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">…

和为k的子数组

继续每日一题&#xff0c;今天给大家分享一道经典的前缀和问题 先看一下题目&#xff0c;我带着大家通过一道题目去分析前缀和的思想和解决思路 题目描述&#xff1a; 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的子数组的个数 。 子数…

EVNIA 27M2N3500UK显示器荣膺TÜV莱茵圆偏光认证,树立健康显示新标杆

摘要:舒视蓝4.0圆偏光护眼显示器,守护用眼健康 近日,飞利浦旗下EVNIA舒视蓝4.0圆偏光护眼显示器27M2N3500UK凭借在视觉舒适性与护眼科技领域的卓越表现,成功通过全球知名检测认证机构——德国莱茵TV集团的严格测试,斩获“TV莱茵圆偏光认证”,为用户提供更健康、更舒适的多方位…

开源组件hive调优

bugs归纳 工具 现象 对应bugs 目前解决方案 详情 hive3.1.2 登录 扁鹊健康科技 内存只升不降&#xff0c;最终进程挂断 [HIVE-22275] OperationManager.queryIdOperation does not properly clean up multiple queryIds - ASF JIRA HIVE-26530 HIVE-24179 HIVE-19860 …

狂命爆肝21天,共51K字的JAVA学习笔记奉上,JAVA从入门到精通一文搞定,一文在手JAVA无忧

背景知识 Java 相关概念 JavaSE (Java Standard Edition): 基础版&#xff0c;用于开发桌面应用程序。JavaEE (Java Enterprise Edition): 企业版&#xff0c;用于开发企业级应用程序。JavaME (Java Micro Edition): 微型版&#xff0c;用于开发嵌入式系统和移动设备应用程序…

基于Java+Swing实现餐厅点餐系统(含课程报告)

基于JavaSwing实现餐厅点餐系统 一、系统介绍二、系统展示1.主页2.点菜3.下单4.结算5.销售情况&#xff08;管理员&#xff09; 三、系统实现四、其他系统五、获取源码 一、系统介绍 该系统针对两个方面的用户&#xff0c;一个是用餐客户&#xff0c;另一个是餐厅管理员。将功…

【DRL】强化学习中的概念和术语

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 深度强化学习&#xff08;Deep Reinforcement Learning, DRL&#xff09;是强化学习&#xff08;RL&#xff09;与深度学习&#xff08;DL&#xff09;…

单向实时通信技术SSE

SSE概述 Server-Sent Events 服务器推送事件&#xff0c;简称 SSE&#xff0c;是一种基于HTTP协议的技术&#xff0c;允许服务端向客户端主动推送请求。 其核心特点是流式传输—— 服务端可将数据分块逐步发送&#xff0c;比如当前大语言模型的流式响应就是将先计算出来的数据…

AI Agent的记忆体系与架构设计

LLM本质上是无状态的模型&#xff0c;每次调用都像一次“短暂失忆”。为了让 AI Agent真正理解上下文、具备个性化交互和任务持续性&#xff0c;引入记忆系统至关重要。本文将从技术与架构角度出发&#xff0c;系统介绍构建短期和长期记忆的最佳实践。 一、AI Agent中的记忆类型…

FastJson的反序列化问题入门

FastJson 简介 他是一个java的依赖库主要是用来进行处理web的json数据&#xff0c;比如就类似于序列化和反序列化 演示 先创建一个类&#xff0c;这个fastjson触发的条件主要就是要处理的类中有 set&#xff0c;get方法 这个方法主要是依赖了 封装思想 导入get , set 方法 …

Lavazza拉瓦萨再度牵手兰博基尼汽车 百年咖啡注入超跑速度

2025年6月12日&#xff0c;继去年首次合作反响热烈之后&#xff0c;有着130年历史的全球咖啡巨头Lavazza拉瓦萨与兰博基尼汽车再度携手开启跨界合作。这不仅是两个传奇品牌的基因共振&#xff0c;更是一场关于咖啡豆与机械美学的深度创新实验。 Lavazza&#xff0c;这个名字在意…

Arduino入门教程:​​​​​​​2、代码基础

飞书文档https://x509p6c8to.feishu.cn/docx/Qyv3dvEIDozdcvxlbkRc2lDdnMc 一、基本程序结构 #include <Arduino.h> void setup() {}void loop() {} //头文件->可以理解为Arduino工具箱 #include <Arduino.h> //初始化函数&#xff0c;只执行一次&#xff0c;…

安卓9.0系统修改定制化____系列 ROM解打包 修改 讲解 导读篇

专栏系列前言&#xff1a; &#x1f49d;&#x1f49d;&#x1f49d;本专栏作者从事rom系统修改以及手机维修 刷机多年。从当年山寨机开始。历经安卓4.--至目前的安卓15.合作伙伴遍及各类工作室以及PDA商家 私人玩友等。在广告机 平板 pda设备 会议机 车机的rom修改中略有经…

免单统计 - 华为OD机试真题(JavaScript题解)

华为OD机试题库《C》限时优惠 9.9 华为OD机试题库《Python》限时优惠 9.9 华为OD机试题库《JavaScript》限时优惠 9.9 针对刷题难&#xff0c;效率慢&#xff0c;我们提供一对一算法辅导&#xff0c; 针对个人情况定制化的提高计划&#xff08;全称1V1效率更高&#xff09;。 看…

pikachu靶场通关笔记25 SQL注入08-布尔盲注(base on boolian 手工注入+脚本注入 两种方法渗透)

目录 一、SQL注入 二、布尔盲注 三、源码分析 四、渗透实战 1、SQL注入探测 &#xff08;1&#xff09;输入已有账户 &#xff08;2&#xff09;输入不存在账户 &#xff08;3&#xff09;输入单引号等可能报错的情况 2、手工注入 &#xff08;1&#xff09;探测数据…

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…

数字IC后端实现之Innovus中各种cell名字前缀物理含义

社区新一期T28 a7core 和T12nm A55数字IC后端实现训练营直播课开始预约报名啦&#xff01; 今天给大家分享下Innovus中各种常见cell命名规则及其物理含义。知道这些信息后&#xff0c;后续我们在debug后端项目问题时就可以更高效地定位到具体问题。做为数字IC后端工程师&#…

腐烂之息-(Breath of Decay VR ) 硬核VR游戏

《腐烂之息》 是一款沉浸式VR生存射击游戏&#xff0c;带你进入一个充满丧尸身影的末日世界。在灾难爆发三年后&#xff0c;你将从培养仓中醒来&#xff0c;面对一个废墟般的世界。作为幸存者&#xff0c;你必须依靠自己的智慧&#xff0c;在这个充满危险的世界中生存、同时揭开…

ChatGPT 辅助 PyTorch 开发:从数据预处理到 CNN 图像识别的全流程优化

技术点目录 第一章、ChatGPT与DeepSeek等大语言模型助力AI编程必备技能详解第二章、Python基础知识串讲第三章、PyTorch简介与环境搭建第五章、ChatGPT和DeepSeek等大语言模型助力统计分析与可视化第六章、ChatGPT和DeepSeek等大语言模型助力前向型神经网络第七章、ChatGPT和De…