Linux应用开发————线程池
线程池
定义:简单来说,就是存放多个线程的池子。当创建线程池时,就给池中存放一些线程,如果有任务要执行,就从池中取出一个线程执行任务,依次类推;当所有线程都在执行任务时,其他任务暂时等待,当线程执行完任务后不会被回收,而是回到线程池中等待或继续执行其他的任务;这样同一个线程就被反复利用,从而减少创建线程,销毁线程耗时耗费资源的问题。
1.套接字+多线程
思想: 将接受客户端连接与和客户端进行数据通讯的操作分别放置在不同的线程中;
实现:用主线程实现接受客户端连接请求。 一旦一个客户端连接成功,则创建一个线程,在线程中实现与客户端进行数据通讯。
优缺点: 1. 思想简单,实现比较容易
2. 效率低下,因服务器要频繁的创建和销毁线程。
2.线程池
思想:在客户端尚未连接前,先创建一定数量的线程,并让线程处于睡眠状态。当客户端连接后,投递一个任务(就是和客户端进行数据通讯)到任务队列,并唤醒线程,线程竞争执行任务队列中的任务,当线程处理完当前任务,并不销毁(退出),而是接着处理下一次任务。
实现:
1.创建线程池:
typedef struct _task { void* (*taskfun)(void*); void *argp; struct _task *next; }task_t;typedef struct { int thread_num; //线程池中开启的线程数 int queue_num; //任务队列当前的任务数 int queue_max_size; //任务队列的容量 pthread_mutex_t mutex; //互斥锁 pthread_cond_t queue_empty; //用于阻塞线程的条件变量 pthread_cond_t queue_full; //用于阻塞任务添加模块的条件变量 pthread_t *id; //用于存储线程ID task_t *head; //任务队列的队头指针 task_t *tail; //任务队列的队尾指针 }threadpool_t;2.初始化程池:
int threadpool_init(threadpool_t *pool, int tnum,int qsize);
3.线程函数
功能:访问任务队列,取出每一个任务结点,执行结点函数。
4.任务队列
功能:用于协调线程与任务添加模块,也就是说任务添加模块向任务队列投递任务结点,线程取出任务结点执行。
5.任务添加模块
功能:产生任务结点,并将任务结点投递到任务队列。
优缺点: 1. 效率相对来讲比较高
2. 实现比较复杂。
相关文章:
Linux应用开发————线程池
线程池 定义:简单来说,就是存放多个线程的池子。当创建线程池时,就给池中存放一些线程,如果有任务要执行,就从池中取出一个线程执行任务,依次类推;当所有线程都在执行任务时,其他任务…...
Spring Boot 集成阿里云OSS 完成文件上传下载
前言: 文件上传下载在项目开发中是一个非常常见的业务场景,在云服务上还没有兴起的时候,一般来说都会把文件单独存放到文件服务器上,随着云服务的兴起,各类云服务厂商都提供了 OSS 服务,本篇我们分享 Spri…...
使用ERA5数据绘制风向玫瑰图的简易流程
使用ERA5数据绘制风向玫瑰图的简易流程 今天需要做一个2017年-2023年的平均风向的统计,做一个风向玫瑰图,想到的还是高分辨率的ERA5land的数据(0.1分辨率,逐小时分辨率,1950年至今)。 风向,我分为了16个&…...
测试脚本并发多进程:pytest-xdist用法
参考:https://www.cnblogs.com/poloyy/p/12694861.html pytest-xdist详解: https://www.cnblogs.com/poloyy/p/14708825.html 总 https://www.cnblogs.com/poloyy/category/1690628.html...
数据可视化的Python实现
一、GDELT介绍 GDELT ( www.gdeltproject.org ) 每时每刻监控着每个国家的几乎每个角落的 100 多种语言的新闻媒体 -- 印刷的、广播的和web 形式的,识别人员、位置、组织、数量、主题、数据源、情绪、报价、图片和每秒都在推动全球社会的事件,GDELT 为全…...
【Linux系列】Linux 系统配置文件详解:`/etc/profile`、`~/.bashrc` 和 `~/.bash_profile`
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
uni-app实现小程序、H5图片轮播预览、双指缩放、双击放大、单击还原、滑动切换功能
前言 这次的标题有点长,主要是想要表述的功能点有点多; 简单做一下需求描述 产品要求在商品详情页的头部轮播图部分,可以单击预览大图,同时在预览界面可以双指放大缩小图片并且可以移动查看图片,双击放大࿰…...
游戏引擎学习第45天
仓库: https://gitee.com/mrxiao_com/2d_game 回顾 我们刚刚开始研究运动方程,展示了如何处理当人物遇到障碍物时的情况。有一种版本是角色会从障碍物上反弹,而另一版本是角色会完全停下来。这种方式感觉不太自然,因为在游戏中,…...
electron常用方法
一,,electron设置去除顶部导航栏和menu 1,electron项目 在创建BrowserWindow实例的main.js页面添加frame:false属性 2,electron-vue项目 在src/main/index.js文件下找到创建窗口的方法(createWindow)&…...
【Spark】Spark Join类型及Join实现方式
如果觉得这篇文章对您有帮助,别忘了点赞、分享或关注哦!您的一点小小支持,不仅能帮助更多人找到有价值的内容,还能鼓励我持续分享更多精彩的技术文章。感谢您的支持,让我们一起在技术的世界中不断进步! Sp…...
meta llama 大模型一个基础语言模型的集合
LLaMA 是一个基础语言模型的集合,参数范围从 7B 到 65B。我们在数万亿个 Token 上训练我们的模型,并表明可以专门使用公开可用的数据集来训练最先进的模型,而无需诉诸专有的和无法访问的数据集。特别是,LLaMA-13B 在大多数基准测试…...
JAVA爬虫获取1688关键词接口
以下是使用Java爬虫获取1688关键词接口的详细步骤和示例代码: 一、获取API接口访问权限 要使用1688关键词接口,首先需要获取API的使用权限,并了解接口规范。以下是获取API接口的详细步骤: 注册账号:在1688平台注册一…...
操作系统——内存管理
1、什么是虚拟内存?它是如何实现的?虚拟内存与物理内存之间有什么关系? 虚拟内存是操作系统提供的一种内存管理机制,它使程序认为自己拥有连续的内存空间,但实际上内存可能被分散存储在物理内存和磁盘交换空间中。 虚…...
android studio 模拟器不能联网?
模拟器路径: C:\Users\Administrator\AppData\Local\Android\Sdk\emulator\emulator.exe.关闭所有AVD设备实例 导航至: C:\Users\userName\AppData\Local\Android\Sdk\emulator查看模拟器名称 AdministratorDESKTOP-6JB1OGC MINGW64 ~/AppData/Local/…...
CTF-WEB: 目录穿越与模板注入 [第一届国城杯 Ez_Gallery ] 赛后学习笔记
step1 验证码处存在逻辑漏洞,只要不申请刷新验证码就一直有效 字典爆破得到 admin:123456 step2 /info?file../../../proc/self/cmdline获得 python/app/app.py经尝试,读取存在的目录时会返回 A server error occurred. Please contact the administrator./info?file.…...
数据结构6.4——归并排序
基本思想: 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个…...
【html 常用MIME类型列表】
本表仅列出了常用的MIME类型,完整列表参考文档。 浏览器通常使用 MIME 类型(而不是文件扩展名)来确定如何处理 URL,因此 Web 服务器在响应头中添加正确的 MIME 类型非常重要。 如果配置不正确,浏览器可能会曲解文件内容…...
Linux之vim编辑器
vi编辑器是所有Unix及linux系统下标准的编辑器,类似于Windows系统下的记事本。很多软件默认使用vi作为他们编辑的接口。vim是进阶版的vi,vim可以视为一种程序编辑器。 前言: 1.文件准备 复制 /etc/passwd文件到自己的目录下(不…...
【工具介绍】可以批量查看LableMe标注的图像文件信息~
在图像处理和计算机视觉领域,LabelMe是一个广泛使用的图像标注工具,它帮助我们对图像中的物体进行精确的标注。但是,当标注完成后,我们常常需要一个工具来批量查看这些标注信息。 今天,我要介绍的这款exe程序…...
2024年山西省第十八届职业院校技能大赛 (高职组)“信息安全管理与评估”赛项规程
2024年山西省第十八届职业院校技能大赛 (高职组)“信息安全管理与评估”赛项规程 一、赛项名称 赛项名称:信息安全管理与评估 英文名称:Information Security Management and Evaluation 赛项组别:高职教师组 赛项归属…...
AI 系统主链路分层设计:从 RAG 检索到 Agent 执行的模块职责划分
问题现象:长链路 AI 系统频繁出现静默失败与状态不一致 在 AI 应用上线后,用户反馈智能问答结果偶尔返回空值或重复内容,且后台日志显示任务已提交但无执行记录。进一步排查发现,RAG 检索模块与 Agent 执行模块之间存在状态流转断…...
实测对比:在Intel i7-12700上,ECI实时性能调优前后能有多大提升?
Intel i7-12700实时性能调优实战:从20微秒到10微秒的ECI优化之路 在工业自动化领域,系统响应时间的每一微秒都至关重要。当一台搭载Intel i7-12700处理器的工控机运行ECI Core-Jammy系统时,默认配置下20微秒的延迟是否已经达到极限ÿ…...
2026数据科学学习路线图:从Python基础到深度学习部署实战
1. 数据科学学习路线图:一份面向2026年的实战指南 如果你正站在数据科学的大门前,看着里面琳琅满目的技术栈和层出不穷的新名词感到迷茫,不知道从哪里开始,也不知道该往哪里走,那么你来对地方了。这份路线图不是一份简…...
如何高效管理300+空洞骑士模组:跨平台模组管理器终极指南
如何高效管理300空洞骑士模组:跨平台模组管理器终极指南 【免费下载链接】Lumafly A cross platform mod manager for Hollow Knight written in Avalonia. 项目地址: https://gitcode.com/gh_mirrors/lu/Lumafly 你是否曾因《空洞骑士》模组管理而头疼&…...
GetQzonehistory:三步轻松备份你的QQ空间完整历史说说
GetQzonehistory:三步轻松备份你的QQ空间完整历史说说 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾经担心QQ空间里那些记录青春岁月的说说会随着时间流逝而消失&…...
Ultra-Fast-Lane-Detection与TPAMI 2022新版本对比分析:核心升级与性能突破
Ultra-Fast-Lane-Detection与TPAMI 2022新版本对比分析:核心升级与性能突破 【免费下载链接】Ultra-Fast-Lane-Detection Ultra Fast Structure-aware Deep Lane Detection (ECCV 2020) 项目地址: https://gitcode.com/gh_mirrors/ul/Ultra-Fast-Lane-Detection …...
SpringBoot 3.1.3 + JDK 17 实战:手把手教你从零搭建一个OAuth2.1授权服务器
SpringBoot 3.1.3 JDK 17 实战:从零构建OAuth2.1授权服务器的完整指南 在当今微服务架构盛行的时代,安全认证已成为系统设计的核心环节。OAuth2.1作为OAuth2.0的进化版本,针对实际应用中的安全漏洞和模糊定义进行了重要修正。本文将带您使用…...
告别网盘限速烦恼:这款开源工具让你的下载速度飞起来
告别网盘限速烦恼:这款开源工具让你的下载速度飞起来 【免费下载链接】netdisk-fast-download 聚合多种主流网盘的直链解析下载服务, 一键解析下载,已支持夸克网盘/uc网盘/蓝奏云/蓝奏优享/小飞机盘/123云盘等. 支持文件夹分享解析. 体验地址: https://l…...
保姆级教程:用Python和CasADi从零实现一个简单的车辆MPC控制器
从零构建车辆MPC控制器的Python实战指南 引言 在自动驾驶和机器人控制领域,模型预测控制(MPC)已经成为实现精确轨迹跟踪的主流方法。与传统的PID控制相比,MPC能够显式处理多变量系统的约束条件,并通过滚动优化机制实现更好的控制性能。本文将…...
3个关键步骤掌握Blender VRM插件:从零开始创建专业虚拟角色
3个关键步骤掌握Blender VRM插件:从零开始创建专业虚拟角色 【免费下载链接】VRM-Addon-for-Blender VRM Importer, Exporter and Utilities for Blender 2.93 to 5.1 项目地址: https://gitcode.com/gh_mirrors/vr/VRM-Addon-for-Blender 想要在Blender中轻…...
