cms做的网站胡源代码天元建设集团有限公司六公司

张小明 2026/1/11 23:44:18
cms做的网站胡源代码,天元建设集团有限公司六公司,响应式网站建设服务器,ppt插件 网站注#xff1a;该文用于个人学习记录和知识交流#xff0c;如有不足#xff0c;欢迎指点。一、线程池是什么#xff1f;进程是操作系统进行资源分配的基本单位#xff0c;线程是操作系统进行CPU调度的基本单位。线程池是维持管理一定数量线程的池式结构#xff1a;维持就是…注该文用于个人学习记录和知识交流如有不足欢迎指点。一、线程池是什么进程是操作系统进行资源分配的基本单位线程是操作系统进行CPU调度的基本单位。线程池是维持管理一定数量线程的池式结构维持就是复用、管理就是控制线程工作和休眠一定数量是因为CPU核心数有限线程池过多会增加CPU切换总的来说线程池Thread Pool是一种预先创建一组可复用线程的资源管理机制核心是维护一个线程集合将任务提交到线程池后由池中的空闲线程执行避免频繁创建 / 销毁线程的开销同时统一管理线程的生命周期二、线程池解决的问题异步执行耗时任务不过度占用核心线程充分利用多核。耗时耗时等待io如落盘操作、向数据库请求数据耗时计算如加解密运算等三、线程池是如何实现的呢在 C 中可基于以下同步原语实现std::thread线程std::mutex互斥锁std::condition_variable条件变量也可使用第三方库如 Boost.ThreadPool。实现模板生产消费模型任务队列生产者push任务到队列唤醒一个休眠线程消费者从任务队列里面取任务去执行任务队列里面没有任务的话消费者会陷入休眠线程阻塞问1为什么采用队列职责生产者对应着一个口、消费者对应着另一个口队列的插入和读取O(1) 、 锁占用的时间短 、 锁的使用变得灵活问2线程池中的线程数量如何确定cpu密集型经验值cpu核心数个线程数量。最优值经验值1、2比对性能得到io密集型线程等待时间cpu运算时间*cpu核心数/cpu运算时间经验值2*cpu核心数个线程数量一半等待、一半执行。最优值经验值1、2 比对性能得到性能测试吞吐量每秒执行的任务数量问3线程池的设计关键关键在于队列的设计和线程数量的管理。1. 队列的设计队列设计维度对应的线程池类型核心影响队列边界有界 / 无界有界任务队列线程池 / 无界队列池决定任务积压时的行为阻塞 / 拒绝 / 溢出队列排序规则普通 FIFO 池 / 优先级线程池决定任务执行的优先级如 VIP 订单优先队列时间属性普通池 / 定时 / 延迟线程池决定任务是否支持延迟 / 周期性执行队列数据结构普通队列池 / 批量任务池决定是否支持任务批量提取 / 执行队列的数量生产者一个队列、消费者一个队列通过一次队列的交换减少了锁的竞争tipsFIFO (First In, First Out) : 先进先出举个典型例子「优先级线程池」和「普通固定线程池」的核心差异就是队列从std::queueFIFO换成了std::priority_queue按优先级排序线程数管理固定完全相同「定时线程池」的核心改造也是队列 —— 将普通队列替换为「按执行时间排序的优先级队列」线程会定时检查队列头部任务是否到执行时间「有界任务队列线程池」和「无界固定线程池」的唯一差异就是队列设置了最大容量队列满时提交任务的线程会阻塞 / 拒绝任务。2. 线程数量的管理基础线程池类型核心区分依据线程数量管理固定线程池线程数初始化后固定永不增删缓存线程池线程数动态增减无核心线程空闲超时销毁单线程池线程数固定为 1任务串行执行四、代码实现关键知识点1. lock_guard与unique_locklock_guard 无法手动释放锁unique_lock 可以手动释放锁2. std::condition_variable not_empty_;not_empty_.wait(lock, condi_func释放锁然后休眠等待唤醒判断条件是否满足 满足则获取锁否则继续休眠not_empty_.notify_one() 唤醒wait中的一个线程not_empty_.notify_all() 唤醒wait中的所有线程常用于销毁线程池核心代码1. 固定线程池threadpool.h#pragma once #include thread #include functional #include vector // #include blockingqueue.h //避免循环依赖头文件扩散只在源文件中引用 // 前置声明 // blockingqueue 仅仅只能用作指针或引用 template typename T class BlockingQueue; class ThreadPool { public: // 初始化线程池 explicit ThreadPool(int threads_num); // 停止线程池 ~ThreadPool(); // 发布任务到线程池 void Post(std::functionvoid() task); private: void Worker(); std::unique_ptrBlockingQueuestd::functionvoid() task_queue_; // 拷贝构造会报错 -- 防止外部调用拷贝构造 std::vectorstd::thread workers_; };threadpool.cc#include blockingqueue.h #include memory #include threadpool.h ThreadPool::ThreadPool(int threads_num) { task_queue_ std::make_uniqueBlockingQueuestd::functionvoid()(); for (size_t i 0; i threads_num; i) { workers_.emplace_back([this] {Worker();}); } } // 停止线程池 ThreadPool::~ThreadPool() { task_queue_-Cancel(); for(auto worker : workers_) { if (worker.joinable()) worker.join(); } } void ThreadPool::Post(std::functionvoid() task) { task_queue_-Push(task); } void ThreadPool::Worker() { while (true) { std::functionvoid() task; if (!task_queue_-Pop(task)) { break; } task(); } }2. 队列的设计blockingqueue.h2.1. 单队列生产者和消费者共用一个队列意味着锁的竞争频繁#pragma once #include condition_variable #include functional #include queue #include mutex #include thread template typename T class BlockingQueue { public: BlockingQueue(bool nonblock false) : nonblock_(nonblock) { } // 入队操作 void Push(const T value) { std::lock_guardstd::mutex lock(mutex_); queue_.push(value); not_empty_.notify_one(); // 唤醒 not_empty_.wait(lock, [this]{ return !queue_.empty() || nonblock_; });处的worker } // 正常 pop 弹出元素 // 异常 pop 没有弹出元素 bool Pop(T value) { std::unique_lockstd::mutex lock(mutex_); // 1. mutex_.unlock() // 2. queue_empty !nonblock 线程在 wait 中阻塞 // notify_one notify_all 唤醒线程 // 3. 假设满足条件 mutex_.lock() // 4. 不满足条件 回到 2 not_empty_.wait(lock, [this]{ return !queue_.empty() || nonblock_; }); // 线程休眠 if (queue_.empty()) return false; value queue_.front(); queue_.pop(); return true; } // 解除阻塞在当前队列的线程 void Cancel() { std::lock_guardstd::mutex lock(mutex_); nonblock_ true; not_empty_.notify_all(); } private: bool nonblock_; std::queueT queue_; std::mutex mutex_; std::condition_variable not_empty_; };2.2 双队列生产者一个队列、消费者一个队列#pragma once #include condition_variable #include functional #include queue #include mutex #include thread template typename T class BlockingQueuePro { public: BlockingQueuePro(bool nonblock false) : nonblock_(nonblock) {} void Push(const T value) { std::lock_guardstd::mutex lock(prod_mutex_); prod_queue_.push(value); not_empty_.notify_one(); } bool Pop(T value) { std::unique_lockstd::mutex lock(cons_mutex_); if (cons_queue_.empty() SwapQueue_() 0) { return false; } value cons_queue_.front(); cons_queue_.pop(); return true; } void Cancel() { std::lock_guardstd::mutex lock(prod_mutex_); nonblock_ true; not_empty_.notify_all(); } private: int SwapQueue_() { std::unique_lockstd::mutex lock(prod_mutex_); not_empty_.wait(lock, [this] {return !prod_queue_.empty() || nonblock_; }); std::swap(prod_queue_, cons_queue_); return cons_queue_.size(); } bool nonblock_; std::queueT prod_queue_; std::queueT cons_queue_; std::mutex prod_mutex_; std::mutex cons_mutex_; std::condition_variable not_empty_; };
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

wordpress建站网页无法运投资者关系互动平台

异或门与同或门的逻辑差异对比:一文说清在数字系统设计的世界里,最不起眼的元件往往藏着最关键的智慧。你可能已经用过无数次A ^ B这个表达式,但有没有想过——为什么偏偏是异或,而不是与、或、非,成了加法器的核心&am…

张小明 2026/1/9 10:56:20 网站建设

旅游网站开发注意点北京制作网站的公司简介

对于电商老板而言,数据是驱动生意增长的核心引擎,但“拿数据”这件事,却长期困扰着无数从业者。自建爬虫团队年耗百万仍频繁掉链子,非法爬取还面临平台封号、合规追责的风险,数据不全、延迟高又导致选品失误、运营低效…

张小明 2026/1/11 17:23:13 网站建设

网站广告位设计从哪里找外贸公司电话

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡如果你遇到具体的…

张小明 2026/1/11 9:24:12 网站建设

沈阳人流需要多少钱大概多少钱哈西建站优化

终极wired-elements手绘风格组件开发指南 【免费下载链接】wired-elements 项目地址: https://gitcode.com/gh_mirrors/wir/wired-elements 想要为你的Web应用添加独特的手绘风格界面吗?wired-elements正是你需要的解决方案!这是一个基于Web Com…

张小明 2026/1/11 14:04:00 网站建设

医疗器械公司网站建设电子商务网站建设管理答案

DreamScene2动态桌面完全指南:3步打造你的专属视觉空间 【免费下载链接】DreamScene2 一个小而快并且功能强大的 Windows 动态桌面软件 项目地址: https://gitcode.com/gh_mirrors/dr/DreamScene2 厌倦了千篇一律的静态壁纸?想让你的Windows桌面真…

张小明 2026/1/9 10:40:04 网站建设

江苏省建设考试网站成都代理注册公司电话

终极指南:如何零障碍安装ta-lib-python技术分析库 【免费下载链接】ta-lib-python Python wrapper for TA-Lib (http://ta-lib.org/). 项目地址: https://gitcode.com/gh_mirrors/ta/ta-lib-python 还在为安装ta-lib-python而烦恼吗?作为量化交易…

张小明 2026/1/9 10:38:01 网站建设