Linux编程之线程池的设计与实现

news2024/11/15 9:49:50

Linux编程之线程池的设计与实现(C++98)

代码

假设服务器的硬件资源“充裕”,那么提高服务器性能的一个很直接的方法就是空间换时间,
即“浪费”服务器的硬件资源,以换取其运行效率。
提升服务器性能的一个重要方法就是采用“池”的思路,
即对一组资源在服务器启动之初就被完全创建好并初始化,这称为静态资源分配。
当服务器进入正式运行阶段,即开始处理客户端请求时,如果它需要相关资源就可以直接从池中获取,
无需动态分配。很显然,直接从池中取得所需要资源比动态分配资源的速度快得多,
因为分配系统资源的系统调用都是很耗时的。当服务器处理完一个客户端连接后,
可以把相关资源放回池中,无须执行系统调用释放资源。从最终效果来看,
资源分配和回收的系统调用只发生在服务器的启动和结束,
这种“池”的方式避免了中间的任务处理过程对内核的频繁访问,提高了服务器的性能。
我们常用的线程池和内存池都是基于以上“池”的优势所设计出来的提升服务器性能的方法,
今天打算以C++98设计一个基于Linux系统的简单线程池。

为什么要采用线程池?

首先想一想,我们一般的服务器都是动态创建子线程来实现并发服务器的,比如每当有一个客户端请求建立连接时我们就动态调用pthread_create去创建线程去处理该连接请求。这种模式有什么缺点呢?

动态创建线程是比较费时的,这将到导致较慢的客户响应。
动态创建的子线程通常只用来为一个客户服务,这将导致系统上产生大量的细微线程,线程切换也会耗费CPU时间。
所以我们为了进一步提升服务器性能,可以采取“池”的思路,把线程的创建放在程序的初始化阶段一次完成,这就避免了动态创建线程导致服务器响应请求的性能下降。

线程池的设计思路

以单例模式设计线程池,保证线程池全剧唯一;
在获取线程池实例进行线程池初始化:线程预先创建+任务队列创建;
创建一个任务类,我们真实的任务会继承该类,完成任务执行。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于YOLOv2和传感器的多功能门禁系统

文章和项目源码已经归档至【Github仓库:https://github.com/timerring/face-recognition-door 】或者公众号【AIShareLab】回复 人脸识别门禁 也可获取。 文章目录 1.系统制作方案概述1.1系统设计的立意1.2系统的主要组成1.3系统的制作方案1.3.1制作方案框图1.3.2制…

基于ntchat的微信群聊同步机器人

微信群有500人上限的限制,建立多个群的话又有信息无法互通的不便,此机器人通过自动将消息转发到同一个同步组内的所有群,消除这一不便性,间接达成扩大群成员数的目的。 效果演示: 项目地址: https://gith…

vue-ueditor-wrap 中获取光标所在的位置,插入文本内容

1.背景 因项目需要,在富文本编辑框中可以设置样式,并且可以在内容光标所在的位置插入文本内容。 2.项目中使用 vue-ueditor-wrap 请跳转至以下链接进行查看 vue项目中使用vue-ueditor-wrap_理想和远方_在路上的博客-CSDN博客 3.获取光标所在的位置&a…

闲鱼自动化软件——筛选/发送系统 V22已经测试完毕

更新 因为闲鱼版本更新,以及闲鱼整个程序维护记录,又增加了一些优化和提升的代码,所以又一次在整体上更新了一版闲鱼的此款软件。 主要更新点: 1、添加显示自定义按钮,可以自动显示最新数据,也可以手动翻…

巨人互动|Google海外户Google+有什么用途

Google是Google推出的一项社交网络服务,类似于Facebook和Twitter。它为用户提供了一个分享和交流的平台,具有许多不同的用途。 首先,Google可以让用户轻松地与朋友、家人、同事和其他人建立联系。通过添加他人为好友或加入共同兴趣的群组&am…

第二证券:华为5.5G迎来新突破 政策加码利好银行估值

昨日,沪指盘中维持窄幅震动走势,深成指、创业板指弱势下探,创业板指再创逾3年新低;到收盘,沪指微涨0.11%报3126.55点,深成指跌0.57%报10197.59点,创业板指跌0.78%报2011.88点;两市算…

C++:vector中pair的排序方法

前言 有时我们需要往 vector 容器中插入 “键值对(pair<int, int>)” 数据&#xff0c;同时又需要按第二个或者第一个进行排序。如上的问题可以借助 STL 的 sort 完成。 程序 1. 向算法传递函数 static bool cmp(const pair<int, int>& a, const pair<int…

使用原生的js实现分享功能,代码非常精简

分享一个原生的js实现移动端分享功能&#xff0c;希望大家喜欢。 兼容性&#xff1a; 实现代码&#xff1a; function share(){ if (!navigator.share) { alert("您当前浏览器不支持分享&#xff01;"); } else { navigator.share({title: {$title},text: {$introd…

Linux操作系统(四):内存管理组件

该部分的学习框架如下&#xff1a; 了解基本内存管理概念&#xff1a;物理内存、虚拟内存、地址空间等。学习虚拟内存的概念、作用和原理。了解虚拟内存是如何将物理内存和进程的地址空间分开管理的&#xff0c;以及它如何提供了更大的地址空间和更好的内存管理。内存分段&…

管理方法论:4. 一对一沟通——了解真实情况

团队人越多&#xff0c;管理者了解真实情况就越困难&#xff0c;为什么&#xff1f; 缺乏安静的、可以专注于沟通的环境。有些话不能跟太多人说&#xff0c;尤其是负面的想法和意见。有些人本来就内向、被动&#xff0c;其他人说话时&#xff0c;自己往往习惯于听&#xff0c;…

java和fastjson

1.java是如何跨平台通信的 java--->class字节码--->jvm虚拟机运行 2.使因为jvm只会读文件名 如果不一致 则无法找到文件 3.main 函数说明java代码的接口 被使用 4.java和class后缀的区别 java是当前编写的代码文件 class是编译后的文件 5.void 没有返回值 这…

报警icon图闪动效果实现css动画

<div class"right-content" style"padding-left:10px; padding-top: 10px;"><div class"text-nowrap">离线摄像仪</div><div class"number-all" :style"{ color: cameraOffline > 0 ? red : #e7b215 }&…

许可分析 license分析 第六章

许可分析是指对软件许可证进行详细的分析和评估&#xff0c;以了解组织内部对软件许可的需求和使用情况。通过许可分析&#xff0c;可以帮助组织更好地管理和优化软件许可证的使用。以下是一些可能的许可分析方法和步骤&#xff1a; 软件许可证变更管理&#xff1a;建立合适的软…

使用TreeMap数据结构解决独特的搜索需求

TreeMap是Java集合&#xff0c;它以有序的键及其相应的值的形式组织数据。它自JDK 1.2以来就已经存在。在内部&#xff0c;TreeMap使用红黑树来组织数据&#xff0c;这是一种自平衡二叉树。TreeMap中的键是唯一的标识符&#xff0c;默认情况下&#xff0c;TreeMap会根据键的自然…

医院如何提升设备维护效率?智能工单管理系统有什么用?

目前&#xff0c;许多大型医院楼宇面积庞大&#xff0c;人员流动频繁&#xff0c;各科室医疗设备繁多&#xff1b;不管是基础硬件设施、还是暖通、电力系统&#xff0c;日常都处于高频使用、运转状态。维修、维护需求多、压力大&#xff0c;存在以下诸多的问题。 1、报修难点  …

使用 Microchip SAM9X60 OTP 存储板卡的MAC地址和序列号

1. 介绍 SAM9X60 处理器有部分OTP&#xff08;One Time Programming&#xff09; Aera 可用于存储user data&#xff0c;这样的话我们就可以将板卡 MAC Address和 SN 序列号写到固定的OTP User Area中。 为什么要使用 OTP 区域存储MAC地址和序列号呢&#xff1f;答案是为了省钱…

C++内存池(1)理论基础及简单实现

一、内存池原理 1、我们先用生活中的例子来解释什么是内存池&#xff1a; &#xff08;1&#xff09;每个月月底钱花完时&#xff0c;或者急需要用钱时&#xff0c;你就打电话给你父母要钱&#xff0c;然后父母把钱通过微信或支付宝转给你。这种方式&#xff0c;每次要用钱…

如何在谷某地球飞行模拟中导入简单飞机开发的飞机模型

如何在谷某地球飞行模拟中导入简单飞机开发的飞机模型 简飞的飞友们&#xff01;我并没有弃坑&#xff0c;只不过我不是你们想象的那样设计飞机。我之前写过一篇图文讲解如何在谷某地球里规划飞行航线&#xff1a; 手把手教你驾驶西锐SR-22小飞机在美国大峡谷中穿行https://b…

Docker 恶意挖矿镜像应急实例

01、概述 当网络流量监控发现某台运行多个docker容器的主机主动连接到一个疑似挖矿矿池的地址时&#xff0c;需要快速响应和排查&#xff0c;以阻止进一步的损害。 面对docker容器的场景下&#xff0c;如何快速分析和识别恶意挖矿容器?本文将分享一种应急响应思路&#xff0c;…

【基础篇】三、SpringBoot基础配置

文章目录 0、模块的复制1、配置文件格式2、yaml语法3、yaml数据读取方式4、关于封装自定义对象来读取yaml配置的思考4、多环境启动5、配置文件分类 0、模块的复制 平时要大量创建模块时&#xff0c;可以直接复制模块&#xff0c;打开project的目录&#xff1a; 复制粘贴&#…