CN109358917A - 一种通用异步任务执行方法及装置 - Google Patents
一种通用异步任务执行方法及装置 Download PDFInfo
- Publication number
- CN109358917A CN109358917A CN201810968124.7A CN201810968124A CN109358917A CN 109358917 A CN109358917 A CN 109358917A CN 201810968124 A CN201810968124 A CN 201810968124A CN 109358917 A CN109358917 A CN 109358917A
- Authority
- CN
- China
- Prior art keywords
- task
- queue
- common tasks
- asynchronous
- unit
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
- G06F9/449—Object-oriented method invocation or resolution
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种通用异步任务执行方法及装置,其方法主要包括:将异步任务封装为通用任务,并将所述通用任务加入任务队列;调用任务执行线程,并利用所述任务执行线程从所述任务队列中取出所述通用任务;解开所述通用任务的封装,获得所述异步任务,并利用所述任务执行线程执行所述异步任务;所述执行所述异步任务完毕之后,将所述任务队列中的所述通用任务消除。本发明的异步任务线程可以把任意的“任务”抛到该线程去执行,通过合理的封装,避免了异步任务线程类和具体任务的耦合,可以适用于不同类型的异步任务。
Description
技术领域
本发明涉及一种异步任务的执行方法及装置。
背景技术
一个计算机系统处理外部请求的方式主要有两种:同步处理和异步处理。
两种处理方式分别有各自的好处,本申请主要针对异步处理,由于请求被转换为了消息,消息转换并缓存后请求操作即结束,不再需要任何等待,系统内部会进一步对各个消息进行处理,等处理完以后再通过回调通知的方式告知请求者处理结果。
现有任务执行类线程大多与具体任务关联,没有把线程和任务完全的抽象出来。大多数设计的异步任务线程都是“专用”线程,线程设计时只考虑执行“某一种”任务,外部需要提供的是执行任务所需的各种数据或者信息,然后通知到异步任务线程,待其执行。线程的功能有很大的局限性,每次有不同类型的“任务”都要重新设计线程,使得开发工作有许多重复。
现有异步任务执行线程大多是单独工作的,没有有效利用多线程来提高任务执行的并行性。
发明内容
本发明针对现有异步任务线程类和具体任务耦合的问题,将具体任务封装为通用任务,可为任意的异步任务执行提供可能。
本发明的技术方案是:
一种通用异步任务执行方法,包括:将异步任务封装为通用任务,并将所述通用任务加入任务队列;
调用任务执行线程,并利用所述任务执行线程从所述任务队列中取出所述通用任务;
解开所述通用任务的封装,获得所述异步任务,并利用所述任务执行线程执行所述异步任务;
所述执行所述异步任务完毕之后,将所述任务队列中的所述通用任务消除。。
为所述异步任务创建一个任务观察者标识并封装为通用标识,所述任务观察者标识为未执行时通知任务队列将通用任务加入任务队列,当任务观察者标识收到执行结果后将任务从任务队列中删除。
任务执行线程运行时,从任务队列队首获取通用任务,然后再执行通用任务对应的异步任务。
任务执行线程终止运行时,任务队列不再接收新的异步任务,任务执行线程将已在队列中的任务执行完毕后再终止运行。
异步任务封装进任务队列时选择排在队首或者队尾。
异步任务封装后先进入分配队列,分配队列寻找任务队列为空的任务执行线程进行任务分配。
分配队列取出队首的通用任务,寻找任务队列为空的线程,将通用任务分配到该线程,如果没有任务队列为空的线程将任务放回队首。
当任务执行线程的任务队列为空时,发出待接收任务的信号,分配队列将队首的任务分配给该线程。
分配队列中的通用任务有一个分配任务观察者标识,分配任务观察者标识为已分配时将通用任务从分配队列中消除。
一种通用异步任务执行装置,包括:
通用任务单元,用于封装异步任务为通用任务;
通用观察者单元,用于封装异步任务的执行任务观察者标识,执行任务观察者标识表达异步任务的执行状态;
任务执行线程单元, 包含任务队列和执行线程,任务队列用于存储通用任务并排序,执行线程用于执行任务队列中的任务,并将执行结果发给通用观察者单元;
通用任务单元包含一个指向通用观察者单元的指针,任务执行线程单元调用所述指针将所述通用任务单元的执行结果发送给所述通用观察者单元。。
任务执行线程单元还包含一个添加任务单元,添加任务单元用于将通用任务单元添加到任务队列。
若异步任务封装为通用任务单元时存在优先任务观察者标识,则执行任务单元将该通用任务添加到任务队列的队首,否则添加到队尾。
通用观察者单元中封装的执行任务观察者标识通过指针得到异步任务的执行结果后,将通用任务从任务队列中删除。
还包括分配队列单元,用于存储和排列封装后的通用任务,将通用任务分配给任务队列为空的任务执行线程单元。
分配队列单元中包含分配模块,分配模块用于取出队首的任务,找到任务队列为空的任务执行线程单元,将任务分配到该任务执行线程单元,没有找到则将任务放回队首。
当任务执行线程单元的任务队列为空时,发出待接收任务的信号,分配队列单元将队首的任务分配给该任务执行线程单元。
分配队列单元将通用任务进行二次封装,并添加一个分配任务观察者标识,分配任务观察者标识为未分配时通用任务在分配队列中排队等待分派,分配任务观察者标识为已分配时将通用任务踢出分配队列。
本发明的有益效果:
本发明设计的“通用”异步任务线程完全把具体的“任务”内容抽象出来,“任何”的“通用任务”都可以交给此线程完成,以后如有不同的任务,只需要把任务的内容封装进“通用任务”对象的task函数接口内部即可,不用重新设计线程。
异步任务线程可以把任意的“任务”抛到该线程去执行,通过合理的封装,异步任务线程在执行任务前,不管要执行的是什么任务,只知道有一个任务在等待执行,同时任务观察者也不管任务什么时候执行完成,只知道这个任务已经分配到队列,通过这种方式,避免了异步任务线程类和具体任务的耦合,可以适用于不同类型的异步任务,任何类型的异步任务都可以通过本发明的异步任务执行方法进行执行。
通过虚函数,在调用不同的派生类的时候,可以拥有不同的功能。当不同的子类继承这个父类的时候,定义不同的实现方法,那么实例化这个子类的时候,这个纯虚函数就有了不同的方法,不用将所有的代码都要重新复制一遍,当继承类越来越多的时候更能体现本方法的优势,简化了编程使得面向对象的方法更加灵活。
同时,通过对执行具体任务的异步任务线程的空闲情况的查询,可以设计出一个异步任务执行线程池,以提高任务执行的并行性。
附图说明:
图1为本发明的异步任务执行过程。
图2为本发明的装置结构组成示意图。
图3为本发明异步任务执行线程池的工作原理图。
具体实施方式
下面结合说明书附图对本发明的具体实现方式做一详细描述。
图1是本发明异步任务执行流程图。本发明的异步任务执行方法如下:
步骤S101:将异步任务封装为通用任务并加入任务队列。在本步骤中,实际上是定义了一个通用的任务,在这个通用的任务下面可以重新设置不同类型的子类任务,从通用任务可以派生出各种子类的具体任务方法。
步骤S102: 任务执行线程从任务队列取出通用任务;任务执行线程在取出通用任务前并不知道这个任务是怎么执行的,这里的通用任务其实只是一个壳,只有调用壳下面的具体任务才能知道这个任务如何执行,这样就避免了线程和具体任务的耦合。
步骤S103:解开封装执行异步任务;任务执行线程调用通用任务下派生的子类任务,执行其方法步骤。
步骤S104:将执行完毕的任务从任务队列中消除。
进一步的,在步骤S101中,为异步任务创建一个任务观察者标识并封装为通用标识,任务观察者标识用于任务观察者标识任务的执行状态,并用于通知任务队列将未执行的通用任务加入任务队列,被封装的任务观察者标识还有另一个功能:在步骤S104中,任务观察者标识收到执行结果后将任务从任务队列中删除。具体过程如图1:
当有新的通用任务需要执行时,先创建该通用任务的任务观察者标识,任务观察者标识用于创建任务对象并且调用任务添加方法addtask,将通用任务排到任务队列中去,任务执行线程从任务队列中取出通用任务获得任务对象,执行通用任务下封装的子类异步任务,然后调用通用任务中的指针将执行结果发给通用标识,通用标识下封装的子类任务观察者标识得到执行结果后,将通用任务从任务队列中删除。通过这种方法,任务执行线程的所执行的对象是通用任务及通用标识,通用任务下可以有多种不同类型的实例化异步任务,相应的在通用标识下也可以有多种不用类型的实例化任务观察者标识。
进一步的,在步骤S102中,任务执行线程运行时,会不断的从任务队列队首获取通用任务,然后再执行通用任务对应的异步任务,当该任务执行线程想要停止工作时,其任务队列不再接收新的异步任务,任务执行线程将已在队列中的任务执行完毕后再终止运行。
进一步的,在步骤S101,通用任务在进入任务队列时可以选择是排在队首还是队尾,即根据用户的任务请求来确定该任务是否优先执行。
进一步的,为了提高任务执行的并行性,对于有多个任务执行线程时,将这些任务执行线程归为一个线程池,同时再创建一个任务分配队列从线程池中选择线程进行分配,具体的分配方法如下:
S001:异步任务封装后先进入分配队列并按照顺序排队,在这个步骤中异步任务会被再作一次封装,并添加一个分配标识,分配标识为未分配时通用任务在分配队列中排队等待分派。
S002:分配队列取出队首的通用任务,从线程池中寻找空的线程。同时当任务执行线程的任务队列为空时,会发出待接收任务的信号,根据待接受任务的信号寻找任务队列为空的线程,将通用任务分配到该线程,如果没有任务队列为空的线程将任务放回队首,等待下一次寻找。
S003:将分配成功的任务从分配队列中删除,分配队列中的通用任务有一个分配标识,将该通用任务放入任务队列后,将该分配标识转换成已分配标识;之后,根据分配标识,将已分配的通用任务删除。
本通用异步任务执行装置,主要包括计算机及各个功能单元,各个功能单元通过计算机程序实现,功能单元的结构如图2,由通用任务类、通用观察者类和通用异步任务执行线程类三种功能单元组成:
通用任务单元,用于封装异步任务为通用任务;在计算机程序中这部分是一个纯虚的函数BaseTask,通用任务类伪代码如下:
class BaseTask {
public:
virtual void *task() = 0;
public:
BaseObserver *observer;
}
通用观察者单元,用于封装异步任务的任务观察者标识,任务观察者标识表达异步任务的执行状态;在计算机程序中这部分是一个纯虚的函数BaseObserver。通用观察者类伪代码如下:
class BaseObserver {
public:
virtual void onTaskExecuted(BaseTask *task, void *result) =0;
}
通用任务单元包含一个指向通用观察者单元的指针,通用观察者单元通过这个指针得到通用任务单元的执行状态。即通用任务除了纯虚函数basetask以外还有一个属性observer,是一个通用观察者类的指针,当task函数被执行获得结果后,如果observer不为空,异步任务执行线程会调用observer的onTaskExecuted方法来通知“观察者”任务执行的结果。
通过对BaseTask和BaseObserver类的实例化,可实现具体的任务和观察者的处理。任务的执行和通知都有了承载者后,我们设计了一个异步任务执行线程类来执行任务:
任务执行线程单元, 包含任务队列和执行线程,任务队列用于存储通用任务并排序,执行线程用于执行任务队列中的任务,并将执行结果发给通用观察者单元;若异步任务封装为通用任务单元时存在优先标识,则执行任务单元将该通用任务添加到任务队列的队首,否则添加到队尾。
进一步的,任务执行线程单元还包含一个添加任务单元addtask,添加任务单元用于将通用任务单元添加到任务队列。当有新的任务请求时,通用观察者单元中的任务观察者标识调用任务执行线程类(简称线程类)的addTask方法把任务添加到队列中,并向任务执行线程(简称线程)发送一个信号量,告知其有一个任务待处理。而线程启动后就进入等待状态,直到收到有任务待处理的通知后开始从任务队列头部取出任务、执行其task方法,并把返回的结果通过调用其observer的onTaskExecuted方法来通知“观察者”。
异步任务执行线程类伪代码如下:
class AsyncTaskExecuteThread {
public:
void addTask(BaseTask *task, bool urgent) {
if(!_running) {
return ;
}
if (urgent) {
_taskArray.pushFront(task);
} else {
_taskArray.pushBack(task);
}
_signal.signal();
}
protected:
void run() {
BaseTask *curTask = 0;
void *result = 0;
while(_running) {
_signal.wait();
if (curTask = _taskArray.getFront()) {
result = curTask->task();
if (curTask->observer) {
curTask->observer->onTaskExecuted(curTask, result);
}
}
}
while(curTask = _taskArray.getFront()) {
result = curTask->task();
if (curTask->observer) {
curTask->observer->onTaskExecuted(curTask, result);
}
}
}
其中run函数为线程执行函数,_running为线程运行标识,当该标识为true时,线程会不断接收新的“任务”,并执行已在队列中的“任务”,当该标识为false时,标识该线程对象即将停止工作,这时会把已在队列中的“任务”都执行完然后退出线程。有任务要异步执行时通过addTask方法把任务添加到任务队列,可以指定urgent参数为true,任务会被添加到当前队列的顶端,会被优先执行,反之如果urgent参数为false,会把任务添加到队列的末尾,任务会等队列中的其他任务都执行完后再执行。
进一步的,举一个BaseTask和BaseObserver类的实例化实例:
一个视频录像服务器需要把实时视频数据存储到文件里,而把数据写入文件是比较耗时的磁盘I/O操作,如果正在接收数据的线程去写入文件,那么可能造成数据接收不及时,或者数据丢失,或者阻塞网络I/O。这时就需要把写入文件的“操作”封装成一个异步任务,通过异步任务执行线程去执行。具体的操作如下:
假设录像类的任务观察者标识叫Record,它继承了BaseObserver类,实现了onTaskExecuted方法。我们设计一个异步任务叫VideoFrameWriteTask,它继承自BaseTask类,实现了task方法。在task方法中,会把数据写到视频文件里。假设我们已经有一个Record类的实例和一个AsyncTaskExecuteThread类的实例在运行,Record类的实例有个叫writeVideoFrameToFile的方法,通过调用该方法把要写入的视频数据以及要写入的文件的句柄传入,该方法内会创建一个VideoFrameWriteTask实例,并调用AsyncTaskExecuteThread类实例的addTask方法把其放入任务队列“_taskArray”。之后,AsyncTaskExecuteThread类实例的run方法就会从“taskArray”里取到VideoFrameWriteTask类的实例,并执行其task方法,获得返回值,然后再通过调用它的observer属性(该属性其实就指向Record类实例的指针)的onTaskExecuted方法来通知Record类的实例任务执行的结果。当Record类实例收到onTaskExecuted回调时会把VideoFrameWriteTask类的实例释放掉。
VideoFrameWriteTask类和Record类的定义如下:
class VideoFrameWriteTask: public BaseTask {
public:
VideoFrameWriteTask(VideoFileHandler *fileHandler, VideoFrame *videoFrame) {
writingFileHandler = fileHandler;
_videoFrame = videoFrame->copy();
}
virtual void *task() {
writingFileHandler->writeVideoFrame(_videoFrame);
_videoFrame->release();
return NULL;
};
private:
VideoFileHandler *_writingFileHandler;
VideoFrame *_videoFrame;
}
class Record : public BaseObserver {
private:
AsyncTaskExecuteThread *_asyncTaskThread;
public:
void writeVideoFrameToFile(VideoFileHander *fh, VideoFrame *videoFrame) {
BaseTask *writeFrameTask = new VideoFrameWriteTask(fh,videoFrame);
_asyncTaskThread->addTask(writeFrameTask);
}
virtual void onTaskExecuted(BaseTask *task, void *result) {
delete task;
};
}
如图3:还包括分配队列单元,用于存储和排列封装后的通用任务,将通用任务分配给任务队列为空的任务执行线程单元。
分配队列单元中包含分配模块,分配模块用于取出队首的任务,找到任务队列为空的任务执行线程单元,将任务分配到该任务执行线程单元,没有找到则将任务放回队首。
当任务执行线程单元的任务队列为空时,发出待接收任务的信号,分配队列单元将队首的任务分配给该任务执行线程单元。
分配队列单元将通用任务进行二次封装,并添加一个分配标识,分配标识为未分配时通用任务在分配队列中排队等待分派,将该通用任务放入任务队列后,将该分配标识转换成已分配;之后,根据分配标识,将已分配的通用任务删除。
我们知道异步执行的任务往往都是比较耗时的任务,因此排在异步任务执行队列里等待的时间也往往较长。如果希望异步任务能更及时地被执行,我们可以创建一组异步任务执行线程对象,再用一个专门用于管理异步任务执行线程分配的对象把“把具体任务分配到最合适的异步任务执行线程”去。具体地,我们可以这么做:
1: 首先我们把AsyncTaskExecuteThread扩展一下,给它添加一个叫addTaskIfIdle的方法,如果现在其任务队列为空,那么就把任务添加到任务队列里(末端),并返回true,否则返回false,用于在空闲状态接收任务:
class AsynTaskExecuteThreadEx : public AsyncTaskExecuteThread {
public:
bool addTaskIfIdle (BaseTask *task) {
if (_taskArray.size() == 0) {
addTask(task, false);
return true;
} else {
return false;
}
}
}
2 :我们根据需要创建一组AsynTaskExecuteThreadEx对象,作为异步任务执行线程池。我们把这组AsynTaskExecuteThreadEx对象称为threadPool。
3 :再派生一个AsynTaskExecuteThread和BaseObserver的子类AssignTaskThread,该线程类专门用于把“具体”任务分配到空闲的线程去。我们把这个类的实例称为assignTaskThread。这时我们还需要一个抽象的“分配任务的任务”类,我们定义如下:
class AssignTaskTask : public BaseTask {
public:
AssignTaskTask (BaseTask *realTask, Array<AsynTaskExecuteThreadEx*> *threadPool) {
_realTask = realTask;
_threadPool = threadPool;
}
virtual void *task() {
bool assigned = false
for (AsynTaskExecuteThreadEx *thread in threadPool) {
if (thread->addTaskIfIdle(_realTask)) {
assigned = true;
break;
}
}
if (!assigned) {
return NULL;
}
return this;
};
private:
BaseTask *_realTask;
Array<AsynTaskExecuteThreadEx *> *_threadPool;
}
4 当assignTaskThread的run函数执行完AssignTaskTask对象的task方法后,会通过onTaskExecuted回调通知到assignTaskThread本身,如果执行结果为NULL表示没有分配好执行线程,如果不为空表示具体任务已被分配到具体执行线程。AssignTaskThread的onTaskExecuted函数需要实现如下:
virtual void onTaskExecuted(BaseTask *task, void *result) {
if (!result) {
addTask(task, true);
} else {
delete task;
}
};
即当任务未被分配到具体执行线程时,立即把分配任务的任务添加到任务队列的头部。
5 当我们接收到一个具体的任务时,我们先把这个任务进行封装,封装到一个“分配任务的任务”的对象里,然后调用assignTaskThread的addTask放到其任务队列里。打个比方,我们现在要执行 “数据库写入任务”,那么我们在创建好DBLogWriteTask对象时,我们把这个对象再进行一次封装:
AssignTaskTask *assignTaskTask = new AssignTaskTask(dbLogWriteTask,threadPool);
(其中,dbLogWriteTask是DBLogWriteTask对象)然后把这个封装后的任务对象添加到assignTaskThread的任务队列里:
assignTaskThread->addTask(assignTaskTask, false);
之后assignTaskThread的run函数的循环在取到assignTaskTask时就会通过调用它的task方法去尝试把dbLogWriteTask分配到具体的执行线程去,如果没有找到空闲的线程,那么会通过onTaskExecuted反馈给assignTaskTask自己,assignTaskTask在onTaskExecuted里发现dbLogWriteTask没有被分配,立即又把assignTaskTask添加到自己的任务队列的头部,等待下一次run函数的循环继续尝试分配。
由于assignTaskThread总是尝试找到空闲的那个线程,所以会保证通过其addTask方法接收的“具体任务”被最快的执行。
Claims (10)
1.一种通用异步任务执行方法,其特征在于包括:
将异步任务封装为通用任务,并将所述通用任务加入任务队列;
调用任务执行线程,并利用所述任务执行线程从所述任务队列中取出所述通用任务;
解开所述通用任务的封装,获得所述异步任务,并利用所述任务执行线程执行所述异步任务;
执行所述异步任务完毕之后,将所述任务队列中的所述通用任务删除。
2.根据权利要求1所述的通用异步任务执行方法,其特征在于:所述将异步任务封装为通用任务包括:为异步任务创建一个任务观察者标识并封装为通用标识;且所述将所述通用任务加入任务队列之前,包括:通知所述任务队列将通用任务加入所述任务队列。
3.根据权利要求1所述的通用异步任务执行方法,其特征在于:所述任务队列不再接收新的封装为通用任务的异步任务后,任务执行线程将已在所述任务队列中的通用任务执行完毕后终止运行。
4.根据权利要求1所述的通用异步任务执行方法,其特征在于:所述将所述通用任务加入任务队列时,是将所述通用任务加入任务队列的队首或者队尾。
5.根据权利要求1所述的通用异步任务执行方法,其特征在于:所述将异步任务封装为通用任务之后,包括:将所述通用任务放入分配队列,并查询是否存在任务队列为空的任务队列;如果存在任务队列为空的任务队列,则从所述分配队列中的队首提取所述通用任务,并将所述通用任务放入一个任务队列为空的任务队列中。
6.根据权利要求5所述的通用异步任务执行方法,其特征在于,还包括:接收任务队列为空的任务队列发出的待接收任务的信号;从所述分配队列中的队首提取通用任务,并将该提取的通用任务放入该为空的任务队列中;且所述将该提取的通用任务放入该为空的任务队列中之后,将该通用任务从所述分配队列中删除。
7.一种通用异步任务执行装置,其特征在于包括:
通用任务单元,用于封装异步任务为通用任务;
通用观察者单元,用于封装异步任务的任务观察者标识,任务观察者标识表达异步任务的执行状态;
任务执行线程单元, 包含任务队列和执行线程,所述任务队列用于存储所述通用任务并排序,所述执行线程用于执行所述任务队列中的任务;
所述通用任务单元包含一个指向所述通用观察者单元的指针,所述任务执行线程单元调用所述指针将所述通用任务单元的执行结果发送给所述通用观察者单元。
8.根据权利要求7所述的通用异步任务执行装置,其特征在于:任务执行线程单元还包含一个添加任务单元,通用观察者单元中封装的任务观察者标识调用添加任务单元将通用任务单元添加到任务队列的队首或者队尾,任务观察者标识得到异步任务的执行结果后将通用任务从任务队列中删除。
9.根据权利要求7或8所述的异步任务执行装置,其特征在于:还包括分配队列单元,用于存储和排列封装后的通用任务,分配队列单元将通用任务进行二次封装,并添加一个分配标识,分配标识为未分配时通用任务在分配队列中排队等待分配给任务队列为空的任务执行线程单元,分配标识为已分配时将通用任务踢出分配队列。
10.根据权利要求9所述的异步任务执行装置,其特征在于:所述分配队列单元中包含分配模块,当任务执行线程单元的任务队列为空时,发出待接收任务的信号,分配模块用于取出队首的任务,找到任务队列为空的任务执行线程单元,将任务分配到该任务执行线程单元,没有找到则将任务放回队首。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810968124.7A CN109358917A (zh) | 2018-08-23 | 2018-08-23 | 一种通用异步任务执行方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810968124.7A CN109358917A (zh) | 2018-08-23 | 2018-08-23 | 一种通用异步任务执行方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109358917A true CN109358917A (zh) | 2019-02-19 |
Family
ID=65350279
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810968124.7A Pending CN109358917A (zh) | 2018-08-23 | 2018-08-23 | 一种通用异步任务执行方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109358917A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111258782A (zh) * | 2020-01-17 | 2020-06-09 | 北京海益同展信息科技有限公司 | 任务队列的处理方法和装置 |
CN112148493A (zh) * | 2020-09-30 | 2020-12-29 | 武汉中科通达高新技术股份有限公司 | 一种流媒体任务管理方法及装置、数据服务器 |
CN113742035A (zh) * | 2020-05-27 | 2021-12-03 | 北京沃东天骏信息技术有限公司 | 一种边缘任务执行方法和装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140215495A1 (en) * | 2013-01-25 | 2014-07-31 | Matt Erich | Task-specific application monitoring and analysis |
CN104978230A (zh) * | 2014-04-02 | 2015-10-14 | 腾讯科技(深圳)有限公司 | 异步任务取消方法、装置及电子设备 |
CN105389209A (zh) * | 2015-12-25 | 2016-03-09 | 中国建设银行股份有限公司 | 一种异步批量任务处理方法及系统 |
CN106327051A (zh) * | 2015-06-30 | 2017-01-11 | 富士通株式会社 | 计算机产品、工作管理方法及工作管理系统 |
CN108234624A (zh) * | 2017-12-29 | 2018-06-29 | 贵阳语玩科技有限公司 | 数据请求的处理方法及系统 |
-
2018
- 2018-08-23 CN CN201810968124.7A patent/CN109358917A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140215495A1 (en) * | 2013-01-25 | 2014-07-31 | Matt Erich | Task-specific application monitoring and analysis |
CN104978230A (zh) * | 2014-04-02 | 2015-10-14 | 腾讯科技(深圳)有限公司 | 异步任务取消方法、装置及电子设备 |
CN106327051A (zh) * | 2015-06-30 | 2017-01-11 | 富士通株式会社 | 计算机产品、工作管理方法及工作管理系统 |
CN105389209A (zh) * | 2015-12-25 | 2016-03-09 | 中国建设银行股份有限公司 | 一种异步批量任务处理方法及系统 |
CN108234624A (zh) * | 2017-12-29 | 2018-06-29 | 贵阳语玩科技有限公司 | 数据请求的处理方法及系统 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111258782A (zh) * | 2020-01-17 | 2020-06-09 | 北京海益同展信息科技有限公司 | 任务队列的处理方法和装置 |
CN111258782B (zh) * | 2020-01-17 | 2023-11-03 | 京东科技信息技术有限公司 | 任务队列的处理方法和装置 |
CN113742035A (zh) * | 2020-05-27 | 2021-12-03 | 北京沃东天骏信息技术有限公司 | 一种边缘任务执行方法和装置 |
CN112148493A (zh) * | 2020-09-30 | 2020-12-29 | 武汉中科通达高新技术股份有限公司 | 一种流媒体任务管理方法及装置、数据服务器 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11550627B2 (en) | Hardware accelerated dynamic work creation on a graphics processing unit | |
EP3425502B1 (en) | Task scheduling method and device | |
CN106371894B (zh) | 一种配置方法、装置和数据处理服务器 | |
CN109358917A (zh) | 一种通用异步任务执行方法及装置 | |
US7770177B2 (en) | System for memory reclamation based on thread entry and release request times | |
CN106569891B (zh) | 一种存储系统中任务调度执行的方法和装置 | |
JP2003208412A (ja) | 回路群制御システム | |
CN108319496B (zh) | 资源访问方法、业务服务器、分布式系统及存储介质 | |
JP5309703B2 (ja) | 共有メモリの制御回路、制御方法及び制御プログラム | |
CN111857993B (zh) | 一种内核态调用用户态函数的方法 | |
US8190857B2 (en) | Deleting a shared resource node after reserving its identifier in delete pending queue until deletion condition is met to allow continued access for currently accessing processor | |
CN115185880B (zh) | 一种数据存储方法及装置 | |
CN105359101A (zh) | 用于多核处理器的系统管理中断处理 | |
CN108153596A (zh) | 一种基于无锁队列的消息处理方法和装置 | |
US20200272512A1 (en) | Hardware for supporting os driven observation and anticipation based on more granular, variable sized observation units | |
CN112306669A (zh) | 一种基于多核系统的任务处理方法及装置 | |
CN108875381A (zh) | 一种支持内核模块隔离的消息服务模块的设计方案 | |
CN114168271A (zh) | 一种任务调度方法、电子设备及存储介质 | |
US20240004695A1 (en) | Method and Apparatus for Processing Interrupt Request | |
WO2024119930A1 (zh) | 调度方法、装置、计算机设备和存储介质 | |
EP3702911A2 (en) | Hardware for supporting os driven load anticipation based on variable sized load units | |
WO2023125359A1 (zh) | 一种任务处理的方法及装置 | |
JP3762173B2 (ja) | 計算機システム及びネットワークシステム並びに記録媒体 | |
CN106844036B (zh) | 物理设备的访问方法及装置 | |
US8131772B2 (en) | Method and apparatus for improving the performance of object-oriented queues |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |