多任务管理类 MutilTaskManager

计算和计算所需的数据能被较为平均的非配到若干task的时候,下面的任务管理类可以提供在大数据大计算量的情况下非精确的控制task的执行数量来限制计算量和内存占用量.

 

下面是代码(非线程安全版本):

 

复制代码
     public  class MutilTaskManager
    {
         private  readonly  int _maxRun;
         private  readonly  int _maxQuenen;
         private List<Task> _taskRunningList;
         private  readonly Queue<Task> _taskQueue;

         public  bool IsQueueFull
        {
             get {  return _taskQueue.Count > _maxQuenen; }
        }

         public MutilTaskManager( int maxRun =  8int maxQuenen =  2)
        {
            _maxRun = maxRun;
            _maxQuenen = maxQuenen;
            _taskRunningList =  new List<Task>(maxRun);
            _taskQueue =  new Queue<Task>( 2);
        }

         public  void TakeBooting( int sleepTime =  10)
        {
             if (_taskRunningList.Count >= _maxRun)
            {
                _taskRunningList = _taskRunningList.Where(it => !it.IsCompleted).ToList();
            }
             while (_taskRunningList.Count < _maxRun && _taskQueue.Count >  0)
            {
                 var t = _taskQueue.Dequeue();
                _taskRunningList.Add(t);
                t.Start();
            }
            System.Threading.Thread.Sleep(sleepTime);
        }

         public  void Enqueue(Task task)
        {
            _taskQueue.Enqueue(task);
            TakeBooting( 0);
        }

         public  void WaitAll()
        {
             while (_taskQueue.Count >  0)
            {
                TakeBooting();
            }
            Task.WaitAll(_taskRunningList.ToArray());
        }
    }
复制代码

线程安全版本:

复制代码
public  class MutilTaskManager
    {
         private  readonly  int _maxRun;
         private  readonly  int _maxQuenen;
         private List<Task> _taskRunningList;
         private  readonly Queue<Task> _taskQueue;
         private  object _lockObj =  new  object();
         public  bool IsQueueFull
        {
             get {  return _taskQueue.Count > _maxQuenen; }
        }

         public MutilTaskManager( int maxRun =  8int maxQuenen =  2)
        {
            _maxRun = maxRun;
            _maxQuenen = maxQuenen;
            _taskRunningList =  new List<Task>(maxRun);
            _taskQueue =  new Queue<Task>( 2);
        }

         public  void TakeBooting( int sleepTime =  10)
        {
             lock (_lockObj)
            {
                 if (_taskRunningList.Count >= _maxRun)
                {
                    _taskRunningList = _taskRunningList.Where(it => !it.IsCompleted).ToList();
                }
                 while (_taskRunningList.Count < _maxRun && _taskQueue.Count >  0)
                {
                     var t = _taskQueue.Dequeue();
                    _taskRunningList.Add(t);
                    t.Start();
                }
            }
            System.Threading.Thread.Sleep(sleepTime);
        }

         public  void Enqueue(Task task)
        {
             lock (_lockObj)
            {
                _taskQueue.Enqueue(task);
            }
            TakeBooting( 0);
        }

         public  void WaitAll()
        {
             while (_taskQueue.Count >  0)
            {
                TakeBooting();
            }
            Task.WaitAll(_taskRunningList.ToArray());
        }
    }
复制代码

 

使用示例:

复制代码
         void Test()
        {
             var mtm =  new MutilTaskManager();
             foreach( int i  in( new  int[ 10]))
            {
                 while (mtm.IsQueueFull)
                {
                    mtm.TakeBooting();
                }
                mtm.Enqueue( new Task(myTask));
            }
        }

         void myTask()
        {
             // read data
            
// do something
        }
复制代码

 

 

本文转自today4king博客园博客,原文链接:http://www.cnblogs.com/jinzhao/archive/2012/03/21/2410191.html,如需转载请自行联系原作者

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
几篇CVPR关于multi-task的论文笔记整理,包括 一、 多任务课程学习Curriculum Learning of Multiple Tasks 1 --------------^CVPR2015/CVPR2016v--------------- 5 二、 词典对分类器驱动卷积神经网络进行对象检测Dictionary Pair Classifier Driven Convolutional Neural Networks for Object Detection 5 三、 用于同时检测和分割的多尺度贴片聚合(MPA)* Multi-scale Patch Aggregation (MPA) for Simultaneous Detection and Segmentation ∗ 7 四、 通过多任务网络级联实现感知语义分割Instance-aware Semantic Segmentation via Multi-task Network Cascades 10 五、 十字绣网络多任务学习Cross-stitch Networks for Multi-task Learning 15 --------------^CVPR2016/CVPR2017v--------------- 23 六、 多任务相关粒子滤波器用于鲁棒物体跟踪Multi-Task Correlation Particle Filter for Robust Object Tracking 23 七、 多任务网络中的全自适应特征共享与人物属性分类中的应用Fully-Adaptive Feature Sharing in Multi-Task Networks With Applications in Person Attribute Classification 28 八、 超越triplet loss:一个深层次的四重网络,用于人员重新识别Beyond triplet loss: a deep quadruplet network for person re-identification 33 九、 弱监督级联卷积网络Weakly Supervised Cascaded Convolutional Networks 38 十、 从单一图像深度联合雨水检测和去除Deep Joint Rain Detection and Removal from a Single Image 43 十一、 什么可以帮助行人检测?What Can Help Pedestrian Detection? (将额外的特征聚合到基于CNN的行人检测框架) 46 十二、 人员搜索的联合检测和识别特征学习Joint Detection and Identification Feature Learning for Person Search 50 十三、 UberNet:使用多种数据集和有限内存训练用于低,中,高级视觉的通用卷积神经网络UberNet: Training a Universal Convolutional Neural Network for Low-, Mid-, and High-Level Vision using Diverse Datasets and Limited Memory 62 一共13篇,希望能够帮助到大家
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值