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

下列关于网站开发中网页发布百度官方免费下载安装

下列关于网站开发中网页发布,百度官方免费下载安装,中企动力做的网站怎么登陆,手机网站制作工具线程池基本信息 线程池是一种结合池化思想衍生出来的一种线程管理及使用的方案 其主要针对服务器端多线程场景下,服务器频繁接收请求,每个请求都分配一个单独的线程去处理。 使用线程的开销: 创建和销毁线程调度线程 线程池主要解决的核…

线程池基本信息

线程池是一种结合池化思想衍生出来的一种线程管理及使用的方案

其主要针对服务器端多线程场景下,服务器频繁接收请求,每个请求都分配一个单独的线程去处理。

使用线程的开销:

  1. 创建和销毁线程
  2. 调度线程

线程池主要解决的核心问题是资源管理的问题。在并发环境下,系统不能确定在任意时刻中,有多少任务需要处理,有多少资源需要投入,这种不确定性带来以下问题:

  • 频繁申请/销毁/调度资源,将带来执行业务之外的开销,线程数量过多时,这部分消耗非常巨大
  • 对资源申请缺少抑制手段,容易引发资源耗尽的风险
  • 系统无法合理的管理内部资源的分布,会降低系统的稳定性

线程池的几个概念

  • 线程池管理器
    用于初始化一定数量的线程资源,提供启动线程,停止线程、调配任务的方法。
  • 工作线程
    线程池中等待并执行分配任务的线程
  • 任务接口
    添加任务的接口,便于工作线程调度任务的执行
  • 任务队列
    用于存放等待处理的任务(区分任务的优先级)

线程池工作的四种场景

  • 线程池空闲
    主程序中没有任务需要执行,任务队列为空闲状态
    在这里插入图片描述

  • 线程池未饱和工作
    主程序添加小于线程池中线程数量的任务
    在这里插入图片描述

  • 线程池饱和,启用任务缓冲
    主程序添加的任务数量大于当前线程池中线程数量
    在这里插入图片描述

  • ** 任务缓冲队列饱和**
    主程序添加的任务数量大于当前线程池的中线程数量,且任务缓冲队列已满
    在这里插入图片描述

线程池的实现

  • 头文件
#pragma once
#include <vector>
#include <functional>
#include <thread>
#include <queue>
#include <mutex>
#include <condition_variable>namespace MyThreadPool
{static const int kiInitThreadSize = 3;enum TaskPriority{Level0,Level1,Level2};typedef std::function<void()> Task;typedef std::pair<TaskPriority, Task> TaskPair;typedef std::vector<std::thread*> Threads;class ThreadPool{public:ThreadPool();virtual ~ThreadPool();void Start();void Stop();void AddTask(const Task& task);void AddTask(const TaskPair& taskPair);private:ThreadPool(const ThreadPool&);  // 拷贝构造定义为私有,禁止该类对象进行复制拷贝const ThreadPool& operator=(const ThreadPool&);struct TaskPriorityCmp{bool operator()(const TaskPair& p1, const TaskPair& p2){return p1.first > p2.first;}};void ThreadLoop();Task Take();typedef std::priority_queue<TaskPair, std::vector<TaskPair>, TaskPriorityCmp> Tasks;  // 优先队列Threads m_threads;Tasks m_tasks;std::mutex m_mutex;std::condition_variable m_cond;bool m_bIsStarted;};
}
  • 源文件
#include "my_thread_pool.h"#pragma once
#include <vector>
#include <functional>
#include <thread>
#include <queue>
#include <iostream>
#include <condition_variable>namespace MyThreadPool
{ThreadPool::ThreadPool() : m_mutex(), m_bIsStarted(false){}ThreadPool::~ThreadPool(){if (m_bIsStarted){Stop();}}void ThreadPool::Start(){if (!m_threads.empty()){return;}m_bIsStarted = true;m_threads.reserve(kiInitThreadSize);for (int i = 0; i < kiInitThreadSize; ++i){m_threads.push_back(new std::thread(std::bind(&ThreadPool::ThreadLoop, this)));}}void ThreadPool::Stop(){std::cout << "ThreadPool Stop()!" << std::endl;{std::unique_lock<std::mutex> lock(m_mutex);m_bIsStarted = false;m_cond.notify_all();}for (auto it = m_threads.begin(); it != m_threads.end(); ++it){(*it)->join();delete (*it);}m_threads.clear();}void ThreadPool::AddTask(const Task& task){std::unique_lock<std::mutex> lock(m_mutex);TaskPair taskPair(Level2, task);m_tasks.push(taskPair);m_cond.notify_one();}void ThreadPool::AddTask(const TaskPair& taskPair){std::unique_lock<std::mutex> lock(m_mutex);m_tasks.push(taskPair);m_cond.notify_one();}void ThreadPool::ThreadLoop(){std::cout << "ThreadPool::ThreadLoop() tid is " << std::this_thread::get_id() << " start!" << std::endl;while (m_bIsStarted){Task oneTask = Take();if (oneTask){oneTask();}}std::cout << "ThreadPool::ThreadLoop() tid is " << std::this_thread::get_id() << " exit!" << std::endl;}Task ThreadPool::Take(){ std::unique_lock<std::mutex> lock(m_mutex);while (m_tasks.empty() && m_bIsStarted){std::cout << "ThreadPool::Take tid : " << std::this_thread::get_id() << " wait" << std::endl;m_cond.wait(lock);}std::cout << "ThreadPool::Take tid : " << std::this_thread::get_id() << " wake up" << std::endl;Task taskTmp;Tasks::size_type size = m_tasks.size();if (!m_tasks.empty() && m_bIsStarted){taskTmp = m_tasks.top().second;m_tasks.pop();}return taskTmp;}}
http://www.hkea.cn/news/774369/

相关文章:

  • 深圳做网站google推广网络营销和传统营销的区别和联系
  • 专业做网站的顺德公司网络推广怎么收费
  • php商城网站建设多少钱天津百度seo排名优化
  • 注册网站免费注册insseo关键词优化推广哪家好
  • 深圳房地产网站开发常见的网络营销工具有哪些
  • .net 网站管理系统湖南企业竞价优化首选
  • 南山区住房与建设局官方网站网络赚钱推广
  • wordpress mycred汉化seo引擎搜索入口
  • 在线教育网站用什么做百度搜索的优势
  • 甘肃省住房城乡建设厅网站首页智能建站模板
  • 智能科技网站模板下载地址百度学术论文查重
  • 网站要怎么做才能让360收录推广品牌的策划方案
  • 做网站前景营销课程培训视频
  • 青海做网站广告开户南京seo
  • wordpress写软文赚钱seo快速培训
  • 南宁网站建设接单陕西省人民政府
  • wordpress网站价格seo域名综合查询
  • 支付网站怎么做的网络自动推广软件
  • js做网站统计品牌关键词优化
  • 微信公众号管理平台官网谷歌seo建站
  • 鲜花购物网站源码企业网站营销的优缺点
  • 表白网站制作在线日照网站优化公司
  • 企业网站建设策划书 前言徐州关键词优化排名
  • 一级a做爰片视频网站全国新闻媒体发稿平台
  • 唐山网站建设哪家专业高德北斗导航
  • wordpress 地址 .html企业网站seo贵不贵
  • 提供网站制作公司哪家好网络软文范文
  • 做原型网站枣庄网络推广seo
  • 品牌网站开发设计外贸网站平台
  • 网站做留言板网站推广在线