zoukankan      html  css  js  c++  java
  • 线程池

    线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。 

    原理:
    线程池是预先创建线程的一种技术。线程池在还没有任务到来之前,创建一定数量的线程,放入空闲队列中。这些线程都是处于睡眠状态,即均为启动,不消耗CPU,而只是占用较小的内存空间。当请求到来之后,缓冲池给这次请求分配一个空闲线程,把请求传入此线程中运行,进行处理。当预先创建的线程都处于运行状态,即预制线程不够,线程池可以自由创建一定数量的新线程,用于处理更多的请求。当系统比较闲的时候,也可以通过移除一部分一直处于停用状态的线程。

    #pragma once
    #include <list>
    #include <queue>
    #include <Windows.h>
    using namespace std;
    class CItask
    {
    public:
        CItask(){}
        virtual ~CItask(){}
        virtual void Run() = 0;
    };
    class CMyThreadPool
    {
    public:
        CMyThreadPool(void);
        ~CMyThreadPool(void);
    public:
        //1.创建一些线程
        bool CreateThreadPool(int min ,int max);
        //2.销毁线程池
        void Destroy();
        //3.线程执行函数
        static unsigned  _stdcall ThreadProc(void*);
        //4.投递函数
        bool PostItask(CItask * Itask);
    private:
        list<HANDLE> m_Handle;//装线程
        queue<CItask*> m_Itask;//装任务
        HANDLE m_semaphore;
        bool m_bflag;
        long m_MaxThread;//最大线程数,一般为CPU的2倍
        long m_RunThread;//处于执行状态的线程
        long m_CreateThread;//所有创建的线程,包括执行状态和睡眠状态
    };
  • 相关阅读:
    jsp int转String or String转int 方法
    log4j详细使用教程
    SQL 查询当天,本月,本周的记录
    1012Linux流编程的一些知识点
    myeclipse过期以后提示过期以后怎么办?!
    mysql常用命令
    Myeclipse文件没出错,但是项目上显示有错的解决办法
    java的一些命名规范吧
    mysql 按照时间查询
    struts1.x和struts2.x之间的一些区别
  • 原文地址:https://www.cnblogs.com/Lune-Qiu/p/8424388.html
Copyright © 2011-2022 走看看