当前位置: 首页 > news >正文

设计模式-工作线程 创建多少线程池合适

1、定义


让有限的工作线程(Worker Thread)来轮流异步处理无限多的任务。也可以将其归类为分工模式,它的典型实现就是线程池,也体现了经典设计模式中的享元模式(重用对象)。

例如,海底捞的服务员(线程),轮流处理每位客人的点餐(任务),如果为每位客人都配一名专属的服务员,那么成本就太高了(对比另- 种多线程设计模式: Thread-Per-Message 来一个消息创建一个线程)

注意,不同任务类型应该使用不同的线程池,这样能够避免饥饿,并能提升效率

例如,如果-一个餐馆的工人既要招呼客人(任务类型A),又要到后厨做菜(任务类型B)显然效率不咋
地,分成服务员(线程池A)与厨师(线程池B)更为合理,当然你能想到更细致的分工

2.饥饿


固定大小线程池会有饥饿现象

  • 两个工人是同一一个线程池中的两个线程
  • 他们要做的事情是:为客人点餐和到后厨做菜,这是两个阶段的工作
    • 客人点餐: 必须先点完餐,等菜做好,上菜,在此期间处理点餐的工人必须等待
    • 后厨做菜: 没啥说的,做就是了
  • 比如工人A处理了点餐任务,接下来它要等着工人B把菜做好,然后上菜,他俩也配合的蛮好
  • 但现在同时来了两个客人,这个时候工人A和工人B都去处理点餐了,这时没人做饭了,死锁

饥饿现象


 饥饿现象-解决:

不同的任务类型调用不同的线程类型

image-20211014143210589

 

3.创建多少线程池合适


1. 过小会导致程序不能充分地利用系统资源、容易导致饥饿
2. 过大会导致更多的线程上下文切换,占用更多内存


3.1 CPU密集型运算


(代码为数据分析,大量使用cpu)

通常采用cpu核数+ 1能够实现最优的CPU利用率,+1 是保证当线程由于页缺失故障(操作系统)或其它原因导致暂停时,额外的这个线程就能顶上去,保证CPU时钟周期不被浪费

3.2 I/O密集型运算


(web应用程序)

CPU不总是处于繁忙状态,例如,当你执行业务计算时,这时候会使用CPU资源,但当你执行I0操作时、远程RPC调用时,包括进行数据库操作时,这时候CPU就闲下来了,你可以利用多线程提高它的利用率。

经验公式如下

线程数 = 核数 + 期望 CPU 利用率 + 总时间(CPU计算时间 + 等待时间) / CPU 计算时间

image-20211014143838568

 

相关文章:

设计模式-工作线程 创建多少线程池合适

1、定义 让有限的工作线程(Worker Thread)来轮流异步处理无限多的任务。也可以将其归类为分工模式,它的典型实现就是线程池,也体现了经典设计模式中的享元模式(重用对象)。 例如,海底捞的服务员(线程),轮流…...

【算法基础】深度优先搜索(DFS) 广度优先搜索(BFS)

一、DFS & BFS 1. 深度优先搜索DFS 深度优先搜索属于图算法的一种,英文缩写为DFS即Depth First Search.其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次。 2. 广度优先搜索BFS 广度优先搜索较之深度优先搜索之不同在于,深度…...

【分布式】ProtocolBuffer平滑升级原则

原文链接:https://blog.csdn.net/nash_cyk/article/details/99549719 关于Protocol Buffer优势这里就不详细介绍了,如便于不同开发语言的交互通信,便于服务器上线的平滑升级等。 但Protocol Buffer的Message协议升级是需要注意一些细节&…...

第四阶段17-关于Redis中的list类型,缓存预热,关于Mybatis中的`#{}`和`${}`这2种格式的占位符

关于Redis中的list类型 Redis中的list是一种先进后出、后进先出的栈结构的数据。 在使用Redis时,应该将list想像为以上图例中翻转了90度的样子,例如: 在Redis中的list数据,不仅可以从左侧压入,也可以选择从右侧压入…...

stringstream用法

stringstream是 C++ 提供的另一个字串型的串流(stream)物件,和之前学过的iostream、fstream有类似的操作方式。包含在头文件sstream中(#include <sstream>)。 实例: 1、C++标准库中的<sstream>提供了比ANSI C的<stdio.h>更高级的一些功能,即单纯性、类…...

2022年下半年系统集成项目管理工程师综合知识真题及答案解析

2022年下半年系统集成项目管理工程师综合知识真题及答案解析 1、()不属于“提升云计算自主创新能力”的工作内容。A.加强云计算相关基础研究、应用研究、技术研发、市场培育和产业政策密衔接与统筹协调B.引导大型云计算中心优先在能源充足、气候适宜、自然灾害较少的地区部…...

【洛谷 P2089】烤鸡(搜索)

烤鸡 题目背景 猪猪 Hanke 得到了一只鸡。 题目描述 猪猪 Hanke 特别喜欢吃烤鸡&#xff08;本是同畜牲&#xff0c;相煎何太急&#xff01;&#xff09;Hanke 吃鸡很特别&#xff0c;为什么特别呢&#xff1f;因为他有 101010 种配料&#xff08;芥末、孜然等&#xff09;…...

Mac item2 配置免密登录开发机

1、配置 vi ~/.ssh/config 内容如下&#xff1a; Host * ControlMaster auto ControlPath ~/.ssh/master-%r%h:%p ControlPersist yes ServerAliveInterval 60 学习&#xff1a; ControlMaster #连接共享 ControlPath #与ControlMaster一起使用&#xff0c;指定连接共享的路径…...

vue 解决问题:Webpack安装不成功,webpack -v无法正常显示版本号

目录 一、解决问题&#xff1a;Webpack安装不成功&#xff0c;webpack -v无法正常显示版本号 二、解决问题&#xff1a; ERROR Error: Cannot find module webpack-log 三、 解决报错&#xff1a;error:03000086:digital envelope routines::initialization error 四、解决…...

07-1【openEuler】系统及进程管理(网络管理的补充实验及说明)

文章目录说在前面关于nmcli命令的使用使用nmcli命令修改主机IP地址1、运行ip addr列出openEuler20.03上的以太网卡2、列出当前活动的以太网卡3、开始分配静态IP地址&#xff08;1&#xff09;命令语法&#xff08;2&#xff09;将 IPv4 地址192.168.74.175分配给 ens33 网卡上&…...

【Linux】磁盘结构、文件系统、软硬链接、动静态库链接

文章目录1、磁盘结构1.1 磁盘的物理结构1.2 磁盘的存储结构1.3 磁盘的逻辑结构2、文件系统2.1 4KB加载到内存2.2 文件系统结构3、软硬链接3.1 软链接3.2 硬链接4、动静态库4.1 什么是库&#xff1f;4.2 静态库和静态库链接4.3 动态库和动态库链接4.4 动静态库的加载下面了解到&…...

交换机电口、光口、网络速率的基本概念总结

电口和光口千兆网 & 万兆网&#xff1a;POE&#xff1a;包转发率&#xff1a;背板带宽/交换容量&#xff1a;)电口和光口 电口&#xff1a; 电口也即RJ45口&#xff0c;插双绞线的端口&#xff08;网线&#xff09;&#xff0c;一般速率为10M或100M&#xff0c;即为百兆工…...

【面试题 05.02. 二进制数转字符串】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 二进制数转字符串。给定一个介于0和1之间的实数&#xff08;如0.72&#xff09;&#xff0c;类型为double&#xff0c;打印它的二进制表达式。如果该数字无法精确地用32位以内的二进制表示&#xff0…...

webpack - webpack的基本使用和总结

文章目录1&#xff0c;webpack概念2&#xff0c;为什么学webpack3&#xff0c;webpack特点4&#xff0c;相对于其他工具优点5&#xff0c;准备工作6&#xff0c;webpack的核心介绍7&#xff0c;webpack使用 - 打包js代码8&#xff0c;打包css代码9&#xff0c;生成html文件10&a…...

【蓝桥杯嵌入式】定时器实现按键单击,双击,消抖以及长按的代码实现

&#x1f38a;【蓝桥杯嵌入式】专题正在持续更新中&#xff0c;原理图解析✨&#xff0c;各模块分析✨以及历年真题讲解✨都在这儿哦&#xff0c;欢迎大家前往订阅本专题&#xff0c;获取更多详细信息哦&#x1f38f;&#x1f38f;&#x1f38f; &#x1fa94;本系列专栏 - 蓝…...

基于SSM的Javaweb爱心扶贫捐赠系统

文章目录 项目介绍主要功能截图:后台登录首页个人中心用户管理扶贫物资管理扶贫产品管理留言板管理前台前台首页扶贫产品新闻资讯留言板部分代码展示设计总结项目获取方式🍅 作者主页:Java韩立 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,…...

Spring Cloud(微服务)学习篇(三)

Spring Cloud(微服务)学习篇(三) 1 nacos中使用openFeign(调用方式)实现短信发送 1.1 在shop-sms-api中创建com.zlz.shop.sms.api.service/vo/dto/util,目录结构如下所示 1.2 在pom.xml(shop-sms-api)中加入如下依赖 <dependencies><dependency><groupId>…...

一文带你吃透JSP,增删改查实战案例详细解读

文章目录前言JSP 概述JSP快速入门搭建环境导入JSP依赖创建 JSP 页面编写代码测试JSP原理JSP 脚本实战案例JSP缺点发展阶段EL 表达式概述实战案例域对象JSTL 标签用法1用法2前言 不得不说&#xff0c;JSP 现在已经是一门十分老旧的技术了&#xff0c;学习编程时&#xff0c;不仅…...

taobao.item.propimg.upload( 添加或修改属性图片 )

&#xffe5;开放平台基础API必须用户授权 添加一张商品属性图片到num_iid指定的商品中 传入的num_iid所对应的商品必须属于当前会话的用户 图片的属性必须要是颜色的属性&#xff0c;这个在前台显示的时候需要和sku进行关联的 商品属性图片只有享有服务的卖家&#xff08;如&a…...

TDEngine集群监控组件安装配置(Telegra+Grafana方案)

Tdengine的监控指标包括以下几个方面&#xff1a; 系统指标&#xff1a;CPU使用率、内存使用率、磁盘空间、网络流量等。数据库指标&#xff1a;连接数、查询数、写入数、读取数等。SQL指标&#xff1a;执行时间、执行计划、索引使用情况等。集群指标&#xff1a;节点状态、数…...

AI编程助手上下文优化实战:全景生成与角色化工作流降本增效

1. 项目概述&#xff1a;AI助手上下文优化的核心价值如果你和我一样&#xff0c;每天都在用Cursor、GitHub Copilot这类AI编程助手&#xff0c;那你肯定也遇到过这样的场景&#xff1a;写一个复杂功能时&#xff0c;助手要么“失忆”&#xff0c;忘了你项目里已有的工具函数&am…...

【RT-DETR实战】030、注意力机制改进:引入SimAM,EMA等无参注意力

从一次深夜调试说起 上周三凌晨两点,我在部署RT-DETR到边缘设备时遇到了性能瓶颈。模型在Jetson Orin上跑起来比预期慢了23%,显存占用也超出了预算。 用perf工具分析发现,注意力模块的计算开销占了近40%——这让我不得不重新审视那些“标配”的注意力机制。 我们习惯性地…...

AI智能体持久记忆系统:基于MCP协议与Cloudflare Workers的架构实践

1. 项目概述&#xff1a;一个为AI智能体赋予持久记忆的文明如果你和我一样&#xff0c;每天都在和Claude Code、Cursor这类AI编程助手打交道&#xff0c;那你一定对那个永恒的痛点深有体会&#xff1a;每次开启一个新会话&#xff0c;它都像一张白纸。你花了半小时&#xff0c;…...

别再只调参数了!深入理解Pure Pursuit:从几何原理到ROS中lookahead_distance的实战影响分析

别再只调参数了&#xff01;深入理解Pure Pursuit&#xff1a;从几何原理到ROS中lookahead_distance的实战影响分析 当你的机器人在弯道上反复震荡&#xff0c;或者像醉汉一样切弯时&#xff0c;盲目调整参数就像在黑暗中摸索——你可能偶然找到解决方案&#xff0c;但永远无法…...

Git入门终极指南:命令行vs GUI工具效率对比分析

Git入门终极指南&#xff1a;命令行vs GUI工具效率对比分析 【免费下载链接】hello-git Curso para aprender a trabajar con el sistema de control de versiones Git y la plataforma GitHub desde cero y para principiantes. 项目地址: https://gitcode.com/gh_mirrors/h…...

从网盘下载困境到高效文件管理:一站式下载助手解决方案全解析

从网盘下载困境到高效文件管理&#xff1a;一站式下载助手解决方案全解析 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘…...

《AUTOSAR软件组件(SWC)实战:基于ETAS工具链的接口与数据映射》

1. AUTOSAR软件组件(SWC)基础概念 在汽车电子开发领域&#xff0c;AUTOSAR&#xff08;汽车开放系统架构&#xff09;已经成为行业标准。软件组件(SWC)作为AUTOSAR架构中的核心元素&#xff0c;承担着实现具体功能的重任。简单来说&#xff0c;SWC就像乐高积木&#xff0c;每个…...

JDspyder:京东自动化抢购解决方案的技术实现与实战指南

JDspyder&#xff1a;京东自动化抢购解决方案的技术实现与实战指南 【免费下载链接】JDspyder 京东预约&抢购脚本&#xff0c;可以自定义商品链接 项目地址: https://gitcode.com/gh_mirrors/jd/JDspyder 在电商秒杀和限量商品抢购的激烈竞争中&#xff0c;技术手段…...

ARM CTI寄存器安全机制与调试接口设计详解

1. ARM CTI寄存器架构概述在嵌入式系统开发领域&#xff0c;调试接口的安全性和可靠性一直是工程师面临的核心挑战。ARM架构中的CTI&#xff08;Cross-Trigger Interface&#xff09;寄存器组提供了一套完整的硬件级调试解决方案&#xff0c;特别是在多核调试和复杂系统监控场景…...

Linux 7.6 环境下 InterSystems Caché 数据库的部署与核心配置实战

1. 环境准备&#xff1a;打造Cach的温床 在RHEL 7.6最小化系统上部署InterSystems Cach前&#xff0c;我们需要像准备手术室一样严格配置基础环境。我曾在生产环境中因为漏掉一个依赖项导致整个安装流程卡住3小时&#xff0c;这些血泪经验都浓缩在下面的步骤里。 1.1 基础依赖安…...