`
chong_zh
  • 浏览: 69987 次
  • 来自: 杭州
社区版块
存档分类
最新评论

实现线程池的两种模式

 
阅读更多
以下两种模式都可以用于实现线程池
  • 模式1由各个Worker线程自己负责从TaskPool中获取Task。
  • 模式2由1个Dispatcher线程不断遍历Worker线程数组来负责检查各个Worker线程的
  • 状态,如果状态符合则分配新的任务。

模式1:

模式2:


优缺点
  • 模式1的优势在于由各个Worker线程自己负责取Task,不需要额外的Dispatcher线程负
  • 责维护。劣势在于由于取Task是并发的需要在 Access TaskPool时做同步。
  • 模式2的优势在于可以避免上述模式1的同步开销,但是多了一个Dispatcher线程来维
  • 护,Naive的Dispatcher实现需要忙等轮询 Worker线程数组,会造成Performance cost。
分享到:
评论

相关推荐

    java常用23中设计模式

    总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式...其实还有两类:并发型模式和线程池模式。

    C++基于线程池技术实现大并发网络IO框架,一个基于C++11的轻量级网络框架

    环形缓冲,支持主动读取和读取事件两种模式。 mysql链接池,使用占位符(?)方式生成sql语句,支持同步异步操作。 简单易用的ssl加解密黑盒,支持多线程。 其他一些有用的工具。 命令行解析工具,可以很便捷的实现...

    23种设计模式的C++实现.rar

    其实还有两类:并发型模式和线程池模式。 下面对23种设计模式做一个概括性的介绍 一、创建型模式 1、​​单例模式​​:这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象(单例类只能...

    设计模式Demo

    其实还有两类:并发型模式和线程池模式。 二、设计模式的六大原则 1、开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插...

    ThreadPool:一个简单的C ++线程池实现

    两种ThreadPool停止模式:同步和异步 main.cpp提供了使用此ThreadPool的示例代码。 ##内容 Makefile :用于编译库的makefile main.cpp :使用此ThreadPool库的示例代码 Task.h :将由线程执行的任务的抽象接口 ...

    DesignModelCode:手撕设计模式!!

    DesignModelCode 手撕设计模式!!每一种设计模式尽量用代码实现一遍,将在博客中详细讲解,慢慢更新~ 这是:) 设计模式的分类 总体来说设计模式分为三大类: ...特殊的两类: 并发型模式和线程池模式

    javaforkjoin源码-filespilt-demo:初始化项目

    单线程读多线程写方案,该方案使用了两种不同的线程池实现:ThreadPoolExcutor和ForkJoinPool,分别对应NORMAL和FORKJOIN两种执行模式; 生产者-消费者模式下的多线程读/写方案,对应PRODUCERCONSUMER执行模式。 ...

    Java 的线程工厂 ThreadFactory原理及源码详解

    在我们一般的使用中,创建一个线程,通常有两种方式: 继承Thread类,覆盖run方法,实现我们需要的业务 继承Runnable接口,实现run方法,实现我们需要的业务,并且调用new Thread(Runnable)方法,将其包装为一个线程...

    Java之美[从菜鸟到高手演变]之设计模式

    其实还有两类:并发型模式和线程池模式。用一个图片来整体描述一下:开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使...

    Python多线程编程(二):启动线程的两种方法

    一般来说,使用线程有两种模式,一种是创建线程要执行的函数,把这个函数传递进Thread对象里,让它来执行;另一种是直接从Thread继承,创建一个新的class,把线程执行的代码放到这个新的 class里。 将函数传递进...

    基于python selenium实现B站直播弹幕和礼物信息爬虫源码+项目操作说明.zip

    (5)数据抓取频率:分为两种模式,快模式和慢模式,具体可根据弹幕流量和直播间人数选择。快模式每0.5秒左右读一次页面数据,两类数据最大缓存量都为400条;慢模式每1秒左右读一次页面数据,两类数据最大缓存量都...

    Java基础知识点总结.docx

    无论是工作学习,不断的总结是必不可少...Java两种线程类:Thread和Runnable 315 Java锁小结 321 java.util.concurrent.locks包下常用的类 326 NIO(New IO) 327 volatile详解 337 Java 8新特性 347 Java 性能优化 362

    java8源码-java_architect:java_架构师

    Java数组和链表两种结构的操作效率,在哪些情况下(从开头开始,从结尾开始,从中间开始),哪些操作(插入,查找,删除)的效率高? Java内存泄露的问题调查定位:jmap,jstack的使用等等。 java高级 Java创建线程之后...

    Android开发资料合集--续

    81、获得屏幕像素的两种方法 126 82、ShowDialog(int id); 126 83、透明效果的实现 128 84、根据网络或GPS获得经纬度 128 85、TextView 130 90、获取存储卡和手机内部存储空间 130 91、获得当前应用的UID 131 92、...

    StriveEngine2.0

    5.发送消息支持同步、异步两种方式。 6.服务端引擎支持异步消息队列模式。 7.客户端TCP引擎支持断线自动重连。 8.支持Sock5代理。 9.兼容IPv6。 二.使用StriveEngine的步骤 (1)实现ITextContractHelper或者...

    轻量级的通信引擎 StriveEngine

    5.发送消息支持同步、异步两种方式。 6.服务端引擎支持异步消息队列模式。 7.客户端TCP引擎支持断线自动重连。 8.支持Sock5代理。 9.兼容IPv6。 二.使用StriveEngine的步骤 (1)实现ITextContractHelper或者是...

    javaScript-design-pattern:JavaScript一些常用的设计模式

    使用场景: 单例模式是一种常用的模式,有一些对象我们往往只需要一个,比如线程池、全局缓存、浏 览器中的 window 对象等。在 JavaScript 开发中,单例模式的用途同样非常广泛。试想一下,当我 们单击登录按钮的...

    基于P2P和CDN的监控传输子系统的设计

    摘 要:为了探讨多媒体监控系统中所要传输的大量数据,针对CDN网络在进行分发时由于代理...通过与两种传统实现方式的实验比较,发现在采用新算法后,显著降低了CPU的负载,有效提高了系统效率和网络吞吐量。  O 引 言

    安防与监控中的基于P2P和CDN的监控传输子系统的设计

    摘 要:为了探讨多媒体监控系统中所要传输的大量数据,针对CDN网络在进行分发时由于代理...通过与两种传统实现方式的实验比较,发现在采用新算法后,显著降低了CPU的负载,有效提高了系统效率和网络吞吐量。  O 引 言

Global site tag (gtag.js) - Google Analytics