POCO C++库学习和分析 线程 (二).docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
POCOC库学习和分析线程(二)

POCO C++库学习和分析 -- ?线程 (二) 3.??线程池 3.1线程池的基本概念 ? ? ? ?首先我们来明确线程池的一些概念。 ? ? ? ?什么是线程池?线程池的好处? ? ? ? ?池的英文名:POOL,可以被理解成一个容器。线程池就是放置线程对象的容器。我们知道线程的频繁创建、销毁,是需要耗费一点的系统资源的,如果能够预先创建一系列空线程,在需要使用线程时侯,从线程池里,直接获取IDLE线程,则省去了线程创建的过程,当有频繁的线程出现的时候对性能有比较大的好处,程序执行起来将非常效率。 ? ? ? ?什么时候推荐使用线程池? ? ? ? ?很明显,线程越频繁的被创建和释放,越是能体现出线程池的作用。这时候当然推荐使用线程池。 ? ? ? ?什么时候不推荐使用线程池? ? ? ? ?推荐线程池使用的反面情况喽。 ? ? ? ?比如长时间运行的线程(线程运行的时间越长,其创建和销毁的开销在其生命周期中比重越低)。 ? ? ? ?需要永久标识来标识和控制线程,比如想使用专用线程来终止该线程,将其挂起或按名称发现它。因为线程池中的线程都是平等的。 ? ? ? ?线程池需要具备的元素 ? ? ? ?线程池要有列表,可以用来管理多个线程对象。 ? ? ? ?线程池中的线程,具体执行的内容,可自定义。 ?? ? ? 线程池中的线程,使用完毕后,还能被收回,供下次使用。 ? ? ? ?线程池要提供获取空闲(IDLE)线程方法。当然这个方法可以被封装在线程池中,成为其内部接口。 ? 3.2 Poco中线程池实现 ? ? ? ?先看一看Poco中内存池的类图吧。 ? ? ? ?对于Poco中的线程池来说,设计上分成了两层。第一层为ThreadPool,第二层为PooledThread对象。 ? ? ? ?第一层中,ThreadPool负责管理线程池,定义如下: [cpp]? HYPERLINK /arau_sh/article/details/8592579 \o view plain view plain HYPERLINK /arau_sh/article/details/8592579 \o copy copy class?ThreadPool?? {?? public:?? ????ThreadPool(int?minCapacity?=?2,?? ????????int?maxCapacity?=?16,?? ????????int?idleTime?=?60,?? ????????int?stackSize?=?POCO_THREAD_STACK_SIZE);?? ????ThreadPool(const?std::string?name,?? ????????int?minCapacity?=?2,?? ????????int?maxCapacity?=?16,?? ????????int?idleTime?=?60,?? ????????int?stackSize?=?POCO_THREAD_STACK_SIZE);?? ????~ThreadPool();?? ????void?addCapacity(int?n);?? ????int?capacity()?const;?? ????void?setStackSize(int?stackSize);?? ????int?getStackSize()?const;?? ????int?used()?const;?? ????int?allocated()?const;?? ????int?available()?const;?? ????void?start(Runnable?target);?? ????void?start(Runnable?target,?const?std::string?name);?? ????void?startWithPriority(Thread::Priority?priority,?Runnable?target);?? ????void?startWithPriority(Thread::Priority?priority,?Runnable?target,?const?std::string?name);?? ????void?stopAll();?? ????void?joinAll();?? ????void?collect();?? ????const?std::string?name()?const;?? ????static?ThreadPool?defaultPool();?? ?? protected:?? ????PooledThread*?getThread();?? ????PooledT

文档评论(0)

yaobanwd + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档