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

网站备案最新备案号长春网络推广

网站备案最新备案号,长春网络推广,用户网站模板,wordpress注册链接无效一、线程池设计 概念:线程池是一种管理线程资源的机制,预先创建一定数量的线程,当有任务提交时,从线程池中获取线程执行任务,任务完成后线程不会销毁而是返回线程池等待下一个任务。核心组件 线程管理器:负…

一、线程池设计

  • 概念:线程池是一种管理线程资源的机制,预先创建一定数量的线程,当有任务提交时,从线程池中获取线程执行任务,任务完成后线程不会销毁而是返回线程池等待下一个任务。
  • 核心组件
    • 线程管理器:负责创建、销毁和管理线程。
    • 任务队列:存储待执行的任务。
    • 任务接口:定义任务的执行方式。
  • C++实现示例
#include <vector>
#include <queue>
#include <memory>
#include <thread>
#include <mutex>
#include <condition_variable>
#include <future>
#include <functional>
#include <stdexcept>class ThreadPool {
public:ThreadPool(size_t threads);template<class F, class... Args>auto enqueue(F&& f, Args&&... args) -> std::future<typename std::result_of<F(Args...)>::type>;~ThreadPool();
private:// 工作线程集合std::vector<std::thread> workers;// 任务队列std::queue<std::function<void()>> tasks;// 同步相关std::mutex queue_mutex;std::condition_variable condition;bool stop;
};// 构造函数,创建指定数量的工作线程
inline ThreadPool::ThreadPool(size_t threads): stop(false) {for(size_t i = 0; i < threads; ++i) {workers.emplace_back([this] {while(true) {std::function<void()> task;{std::unique_lock<std::mutex> lock(this->queue_mutex);this->condition.wait(lock, [this] { return this->stop || !this->tasks.empty(); });if(this->stop && this->tasks.empty())return;task = std::move(this->tasks.front());this->tasks.pop();}task();}});}
}// 添加新的任务到线程池
template<class F, class... Args>
auto ThreadPool::enqueue(F&& f, Args&&... args) -> std::future<typename std::result_of<F(Args...)>::type> {using return_type = typename std::result_of<F(Args...)>::type;auto task = std::make_shared<std::packaged_task<return_type()>>(std::bind(std::forward<F>(f), std::forward<Args>(args)...));std::future<return_type> res = task->get_future();{std::unique_lock<std::mutex> lock(queue_mutex);// 不允许向已停止的线程池添加任务if(stop)throw std::runtime_error("enqueue on stopped ThreadPool");tasks.emplace([task]() { (*task)(); });}condition.notify_one();return res;
}// 析构函数,销毁线程池
inline ThreadPool::~ThreadPool() {{std::unique_lock<std::mutex> lock(queue_mutex);stop = true;}condition.notify_all();for(std::thread &worker : workers) {worker.join();}
}
  • 使用示例
// 创建一个包含4个线程的线程池
ThreadPool pool(4);// 向线程池提交任务
std::vector<std::future<int>> results;for(int i = 0; i < 8; ++i) {results.emplace_back(pool.enqueue([i] {std::cout << "hello " << i << std::endl;std::this_thread::sleep_for(std::chrono::seconds(1));std::cout << "world " << i << std::endl;return i*i;}));
}// 等待所有任务完成并获取结果
for(auto && result : results)std::cout << result.get() << ' ';
std::cout << std::endl;

二、锁优化

读写锁
  • 概念:读写锁允许多个线程同时读取共享资源,但在写操作时会独占资源,实现“多读单写”的机制。
  • C++实现
#include <shared_mutex>  // C++17引入
#include <mutex>
#include <map>
#include <string>class ThreadSafeHashMap {
private:mutable std::shared_mutex mtx;std::map<std::string, int> data;public:// 读操作,允许多个线程同时进行int get(const std::string& key) const {std::shared_lock<std::shared_mutex> lock(mtx);auto it = data.find(key);return it != data.end() ? it->second : -1;}// 写操作,独占锁void set(const std::string& key, int value) {std::unique_lock<std::shared_mutex> lock(mtx);data[key] = value;}
};
  • 适用场景:适用于读多写少的场景,如缓存系统。
无锁队列
  • 概念:无锁队列使用原子操作替代传统的锁机制,避免线程阻塞,提高并发性能。
  • C++实现(基于CAS操作)
#include <atomic>
#include <memory>template<typename T>
class LockFreeQueue {
private:struct Node {T data;std::atomic<Node*> next;Node(const T& value) : data(value), next(nullptr) {}};std::atomic<Node*> head;std::atomic<Node*> tail;public:LockFreeQueue() : head(nullptr), tail(nullptr) {}void enqueue(const T& value) {Node* newNode = new Node(value);Node* oldTail = tail.load();while (!tail.compare_exchange_weak(oldTail, newNode)) {}if (oldTail) {oldTail->next = newNode;} else {head = newNode;}}bool dequeue(T& value) {Node* oldHead = head.load();while (oldHead) {Node* next = oldHead->next.load();if (head.compare_exchange_weak(oldHead, next)) {value = oldHead->data;delete oldHead;return true;}}return false;}~LockFreeQueue() {T value;while (dequeue(value)) {}}
};
  • 适用场景:适用于高性能要求的生产者-消费者模型。

性能对比与选择策略

技术优点缺点适用场景
传统互斥锁实现简单,适用广泛线程阻塞,上下文切换开销大竞争不激烈的场景
读写锁提高读并发性能实现复杂,写操作可能饥饿读多写少的场景
无锁队列无阻塞,高性能实现复杂,调试困难高性能要求的队列操作

在实际应用中,需要根据具体场景选择合适的并发技术,必要时可以组合使用多种技术以达到最佳性能。


文章转载自:

http://VoloJgkm.csjps.cn
http://wmaRgPz4.csjps.cn
http://Mo2AwyjZ.csjps.cn
http://w981V8hT.csjps.cn
http://FNVOglNl.csjps.cn
http://hcZcxR2n.csjps.cn
http://dSPZ4b58.csjps.cn
http://Y0LTygqx.csjps.cn
http://0fwLe0WF.csjps.cn
http://UUght6s7.csjps.cn
http://TMOlezsh.csjps.cn
http://Lr1twqX4.csjps.cn
http://gv6ui4mf.csjps.cn
http://lgA52K4n.csjps.cn
http://m71SdF9R.csjps.cn
http://4YaOIi5W.csjps.cn
http://MrBMdmsf.csjps.cn
http://kXu1PgME.csjps.cn
http://FKl5sh7S.csjps.cn
http://U0nrMZrp.csjps.cn
http://gtb2fDWD.csjps.cn
http://MrzTHe4q.csjps.cn
http://j4387ZPQ.csjps.cn
http://kgwdtCpB.csjps.cn
http://TDu43Ypx.csjps.cn
http://FsK0NoYh.csjps.cn
http://42bKm5yM.csjps.cn
http://STe4azNp.csjps.cn
http://58mTrReJ.csjps.cn
http://Bc4rLsbE.csjps.cn
http://www.dtcms.com/wzjs/692915.html

相关文章:

  • 旅游信息网站开发背景网站自助建站系统
  • 哪些公司做网站好app开发网站建设前景
  • 建立网站 域名 服务器今天重庆新闻头条
  • 数学建模代做网站wordpress 忘记密码页面
  • 建立网站很重要的要素是什么百度百度百度一下
  • 关于网站开发人员保密协议中国机械加工网易下拉教程
  • 二网站手太仓网站建设网站推广
  • 网站建设198网站开发兼职团队
  • 公司网站维护是做什么的阿里ace 安装wordpress 并修改
  • 冷色调网站网站的信息量能做什么
  • 大连建设工程信息网怎么注册搜索seo
  • 手机网站可以做动态吗商标查询软件哪个app好
  • 购物网站建设代理商购物网站开发方案
  • 那个网站可以做公示房价2024年暴跌
  • 中文域名网站怎么发布信息大型网站的建设
  • 建站网站建设哪个好怎样做网站才不能被攻破
  • 如何打造网站网站权限怎么设置
  • 做电影下载网站还赚钱吗中文企业网站模板下载
  • 泰安肥城网站建设网站推广话术与技巧
  • 高校网站推广方案小程序的功能与作用
  • 在哪个网站找婚照公司成都设计公司第一名
  • 网投网站怎么做想做外贸做哪些网站好
  • 麻阳住房和城乡建设局网站美篇相册制作免费下载app
  • 博物馆网站微信公众号建设方案重庆微信网站建设报价表
  • 网站开发一般采用什么框架男女做暖暖的试看网站
  • 完全自定义纯代码打造你的wordpress站点侧边栏编程做网站容易还是做软件
  • 有哪些免费做简历的网站app模板素材下载免费
  • 海南营销网站建设手机app与手机网站的区别
  • 网站增加关键字天津建设网站安全员考试查询
  • 网站出租建设做洗衣液的企业网站