美文网首页程序员
多线程任务队列实现

多线程任务队列实现

作者: 笑嗯嗯 | 来源:发表于2017-06-24 13:29 被阅读375次

背景

我们在应用程序中, 要完成一些异步工作, 同时在异步工作中又要尽量少用switch case, 这时task任务继承方式就可以达到效果。我们可以在作业队列中分配或添加任务,然后作业队列负责完成任务。这里的工作队列可以是多线程的,也可以是单线程的。本文采用的是多线程的实现,单线程的可以留言给我。

组成部分

设计一个多线程就可以参照线程池的框架, 它要包含几个部分:
a. 线程池管理器:用于创建并管理线程池
b. 工作线程: 线程池中实际执行的线程
c. 任务接口:将任务抽象出来,形成任务接口,从而可以通过继承来实现自己要做的事
d. 任务队列:这里是通过个queue来保存。

设计要求

本文完成的工作队列是以跨平台为前提, 可以在多个平台上运行。并具有以下一些特点:
a. 作业队列是可以单线程也可以多线程
b. 作业队列有优先级,具有高优先级的作业将在队列中具有较低优先级的作业之前添加。因此,它们将在其他较低优先级作业之前处理。
c. 作业队列可以暂停,因此暂停时不能处理新作业。但是用户仍然可以将作业添加到队列中。一旦用户选择恢复作业队列,作业将被处理。

类设计

我们实现的通用线程池框架由五个重要部分组成ZLThread,ZLWorkerThread,ZLThreadManager,ZLThreadPool,ZLTask,除此之外框架中还包括线程同步使用的类ZLMutex和ZLCondition,其中重要部分的大体联系如下图:

Paste_Image.png

a. ZLTask是所有的任务的基类,其提供一个接口DoTaskProc,所有的任务类都必须从该类继承,同时实现DoTaskProc方法。该方法中实现具体的任务逻辑。
b. ZLThread是线程的类抽象,其封装了各个系统线程最经常使用的属性和方法,是所有线程类的基类,具有一个接口Run。
c. ZLWorkerThread是实际被调度和执行的线程类,其从ZLThread继承而来,实现了ZLThread中的Run方法。
d. ZLThreadPool是线程池类,其负责保存线程,释放线程以及调度线程。
e. ZLThreadManager是线程池与用户的直接接口,其屏蔽了内部的具体实现。
f. ZLMutex用于线程之间的互斥。
g. ZLCondition则是条件变量的封装,用于线程之间的同步。

流程

把线程与task任务进行统一管理,创建有限的线程数来处理task任务,如下图:

Paste_Image.png

从图上可以看出主要含有三个队列,任务队列,工作线程队列,忙碌线程队列;任务队列是一个阻塞队列,任务不断地被push进来,这里要有一个线程来取任务,获取空闲线程, 交于空闲线程去处理,如果获取到任务,则将线程会进入忙碌线程队列中,执行任务的DoTaskProc工作,当工作完成,重新移出工作线程队列。

参考

http://blog.csdn.net/ithzhang/article/details/9020283

开源:https://git.coding.net/clzhan/MulitiThreadJob.git

相关文章

  • iOS开发的中的多线程 --- GCD

    多线程实现的几种方案 GCD的简介 GCD中有两个很重要的概念: 任务 、队列。队列中存放的就是多个任务,队列的执...

  • 多线程任务队列实现

    背景 我们在应用程序中, 要完成一些异步工作, 同时在异步工作中又要尽量少用switch case, 这时task...

  • Unity实践—多线程任务队列实现

    Unity 已可使用 Thread、Task 等处理多线程任务,但缺少成熟的多线程任务队列工具,所以在此实现一个,...

  • iOS多线程篇:NSOperation与NSOperationQ

    概述 配合使用NSOperation(任务)和NSOperationQueue(队列)也可以实现多线程。 将需要执...

  • iOS多线程---GCD方法/实现Timer

    多线程核心概念: 一个任务 / 两种队列 / 两种函数. 多线程创建队列的两种方式 GCD实现的Timer如图所示...

  • iOS - Multi-Thread

    概念篇 进程 线程 多线程 单核多线程 & 多核多线程 并行 & 并发 同步 & 异步 队列 队列 & 任务 的执...

  • 多线程02

    多线程2 GCD队列组: 基本使用: 常用函数 队列和组队列的区别 队列:封装任务,添加任务到队列 组队列:封装任...

  • GCD与NSOperation的区别

    GCD和NSOperation 用于实现多线程:GCD会自动将队列中的任务取出,放到对应的线程中执行,任务的取出遵...

  • python多线程的使用

    python多线程的使用 后续还会更新其他方法实现的多线程。 Queue实现多线程 通过队列实现多线程 启动一定数...

  • iOS 网络开发

    多线程 NSThread GCD队列并发队列全局队列自己创建串行队列自己创建主队列任务:block函数sync:同...

网友评论

    本文标题:多线程任务队列实现

    本文链接:https://www.haomeiwen.com/subject/ngkkcxtx.html