worksteal的场景

  对于一个线程池,每个线程有一个队列,想象这种场景,有的线程队列中有大量的比较耗时的任务堆积,而有的线程队列却是空的,现象就是有的线程处于饥饿状态,而有的线程处于消化不良的状态,这时就需要一种方法来解决这个问题。
需要worksteal,顾名思义就是任务窃取,当一个线程处于饥饿状态时,它就会去其它的线程队列中窃取任务,解决线程饥饿导致的效率底的问题。

worksteal要点

  • 每个工作线程将任务放到它内部的队列中;
  • 队列是一个双端队列,支持LIFO的push_front和pop_front操作和FIFO的take操作。
  • 工作线程处理任务通过LIFO来处理最新的任务。
  • 当一个线程处理完了队列中的任务之后,它会试图窃取其他线程队列的任务,根据FIFO从队列的尾部取任务。
  • 如果窃取任务失败则继续尝试,直到所有的线程队列都没有任务了。

worksteal值得探讨的问题

worksteal的适用场景

  worksteal适用场景是任务之间的耗时相差比较大,即有的任务很耗时,有的任务很快完成,这种用worksteal很合适;如果任务的耗时很平均则不适合,因为窃取任务也是需要抢占锁的,会造成额外的消耗。

窃取任务的策略

  有很多种任务窃取策略,比如从任务最多的线程中窃取或随机窃取,需要根据实际情况来选择。

窃取任务的粒度

  是每次窃取一个任务还是窃取一批任务也是需要考量的,如果窃取的一批任务比较耗时,又会导致其它线程来窃取,这样造成了无谓的消耗;如果一次窃取一个任务,而任务很快完成,这又导致重新窃取,降低了效率。这个粒度也是需要根据实际情况调整的。

worksteal thread pool源码

参考资料

A Java Fork/Join Framework

Scheduling Multithreaded Computations by Work Stealing

worksteal thread pool的更多相关文章

  1. Reporting Service 告警"w WARN: Thread pool pressure. Using current thread for a work item"

    如果Reporting Service偶尔出现不可访问或访问出错情况,这种情况一般没有做监控的话,很难捕捉到.出现这种问题,最好检查Reporting Service的日志文件. 今天早上就遇到这样一 ...

  2. The CLR's Thread Pool

    We were unable to locate this content in zh-cn. Here is the same content in en-us. .NET The CLR's Th ...

  3. MySQL thread pool【转】

    本文来自:http://blog.chinaunix.net/uid-26896862-id-3993773.html 刚刚经历了淘宝的双11,真实感受到了紧张的氛围.尽管DB淡定的度过,但是历程中的 ...

  4. Improve Scalability With New Thread Pool APIs

    Pooled Threads Improve Scalability With New Thread Pool APIs Robert Saccone Portions of this article ...

  5. CLR thread pool

    Thread Pooling https://msdn.microsoft.com/en-us/library/windows/desktop/ms686756(v=vs.85).aspx Threa ...

  6. MySQL Thread Pool: Problem Definition

    A new thread pool plugin is now a part of the MySQL Enterprise Edition.In this blog we will cover th ...

  7. Thread Pool Engine, and Work-Stealing scheduling algorithm

    http://pages.videotron.com/aminer/threadpool.htm http://pages.videotron.com/aminer/zip/threadpool.zi ...

  8. DUBBO Thread pool is EXHAUSTED!

    一.问题 在测试环境遇到的异常信息,如下: 16-10-17 00:00:00.033 [New I/O server worker #1-6] WARN  com.alibaba.dubbo.com ...

  9. C++笔记--thread pool【转】

    版权声明:转载著名出处 https://blog.csdn.net/gcola007/article/details/78750220 背景 刚粗略看完一遍c++ primer第五版,一直在找一些c+ ...

随机推荐

  1. 数据库知识整理<四>

    使用DML语句更改数据: 所谓DML语句是指数据库操作语句,其中包括的是对数据库数据的修改.删除.插入. 4.1添加新数据: 插入单行的记录:基本的SQL语句为-insert into <表明& ...

  2. ubuntn下 nginx+phpstorm 中配置xdebug调试

    xdebug安装和配置说明,主要用于个人学习记录. 一.echo phpinfo(); 搜素xdebug,若未搜素到,则标识未安装或安装失败. 二.拷贝步骤1中输出的所有结果.访问http://xde ...

  3. QSS总结以及最近做的Qt项目

    什么是QSS QSS称为Qt Style Sheets也就是Qt样式表,它是Qt提供的一种用来自定义控件外观的机制.QSS大量参考了CSS的内容,只不过QSS的功能比CSS要弱很多,体现在选择器要少, ...

  4. Dynamic CRM 2013学习笔记(十三)附件上传 / 上传附件

    上传附件可能是CRM里比较常用的一个需求了,本文将介绍如何在CRM里实现附件的上传.显示及下载.包括以下几个步骤: 附件上传的web页面 附件显示及下载的附件实体 调用上传web页面的JS文件 实体上 ...

  5. Django表单验证

    从前端提交的各种数据可能存缺少必要字段以及包含非法数据等问题, 并且通常需要进行类型转换后才可以交由业务逻辑处理. 我们当然可以在控制器(Django的views函数)中完成这些工作, 但是这样会使控 ...

  6. python __setattr__, __getattr__, __delattr__, __call__

    python __setattr__, __getattr__, __delattr__, __call__ getattr `getattr`函数属于内建函数,可以通过函数名称获取 value = ...

  7. listen--监听数量

    listen--监听数量 #include <sys/socket.h> int listen(int sockfd, int backlog); /* backlog指定了该套接口排队的 ...

  8. ASP.NET CheckBoxList Operations with jQuery

    本文描述了如何通过jQuery来对ASP.NET CheckBoxList控件进行一些基本操作,如通过value/text/index check/uncheck CheckBoxList,最小/最大 ...

  9. Java攻城狮面试考题

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  10. python实现curl功能

    之前写过一篇文章关于python CURL模块的,在这里我们从urllib来实现同样的功能.具体代码如下: import urllib import urllib2 import json #发起请求 ...