CN109684091B - 一种任务处理方法及装置 - Google Patents

一种任务处理方法及装置 Download PDF

Info

Publication number
CN109684091B
CN109684091B CN201811581669.9A CN201811581669A CN109684091B CN 109684091 B CN109684091 B CN 109684091B CN 201811581669 A CN201811581669 A CN 201811581669A CN 109684091 B CN109684091 B CN 109684091B
Authority
CN
China
Prior art keywords
task
thread
consumer
epoll
producer
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.)
Active
Application number
CN201811581669.9A
Other languages
English (en)
Other versions
CN109684091A (zh
Inventor
李绍辉
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hangzhou DPTech Technologies Co Ltd
Original Assignee
Hangzhou DPTech Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Hangzhou DPTech Technologies Co Ltd filed Critical Hangzhou DPTech Technologies Co Ltd
Priority to CN201811581669.9A priority Critical patent/CN109684091B/zh
Publication of CN109684091A publication Critical patent/CN109684091A/zh
Application granted granted Critical
Publication of CN109684091B publication Critical patent/CN109684091B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/466Transaction processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Debugging And Monitoring (AREA)

Abstract

公开了一种任务处理方法及装置。一种任务处理方法,其特征在于,生产者线程预先创建包括至少1个消费者线程的线程池,所述方法包括:所述生产者线程监听是否产生新的连接请求,并且在监听到新的连接请求的情况下,基于Epoll技术新建任务;所述生产者线程根据预设任务分发规则,从所述线程池中确定符合该规则的任一消费者线程,将所新建的任务基于Epoll技术分发至该消费者线程;所述消费者线程基于Epoll技术确定是否接收到所述生产者线程分发的任务,并在接收到任务后,执行所接收的任务;所述消费者线程在完成所接收任务的情况下,确定该任务对应的连接是否关闭,若是,则结束该任务,若否,则保持持有该任务。

Description

一种任务处理方法及装置
技术领域
本说明书实施例涉及网络通信技术领域,尤其涉及一种任务处理方法及装置。
背景技术
现有技术的生产者消费者模式中,通常由1个生产者线程将任务放入队列,并由多个消费者线程从队列中取出任务并执行。为了避免生产者与消费者的多个线程同时对于队列进行操作造成数据访问异常,一般在其中一个线程对队列进行操作时,需要为队列加互斥锁。
但是,现有技术的任务处理方案,使得每次某1个线程将任务放入与取出队列时,其他线程均需要进行等待,使得任务分发处理效率较低。基于现有技术,需要更高效的任务处理方案。
发明内容
有鉴于此,本说明书实施例提供一种任务处理方法及装置,技术方案如下:
一种任务处理方法,其特征在于,生产者线程预先创建包括至少1个消费者线程的线程池,所述方法包括:
所述生产者线程监听是否产生新的连接请求,并且在监听到新的连接请求的情况下,基于Epoll技术新建任务;
所述生产者线程根据预设任务分发规则,从所述线程池中确定符合该规则的任一消费者线程,将所新建的任务基于Epoll技术分发至该消费者线程;
所述消费者线程基于Epoll技术确定是否接收到所述生产者线程分发的任务,并在接收到任务后,执行所接收的任务;
所述消费者线程在完成所接收任务的情况下,确定该任务对应的连接是否关闭,若是,则结束该任务,若否,则保持持有该任务。
一种任务处理装置,其特征在于,所述装置包括:生产者线程、以及生产者线程预先创建的包括至少1个消费者线程的线程池;
所述生产者线程监听是否产生新的连接请求,并且在监听到新的连接请求的情况下,基于Epoll技术新建任务;
所述生产者线程根据预设任务分发规则,从所述线程池中确定符合该规则的任一消费者线程,将所新建的任务基于Epoll技术分发至该消费者线程;
所述消费者线程基于Epoll技术确定是否接收到所述生产者线程分发的任务,并在接收到任务后,执行所接收的任务;
所述消费者线程在完成所接收任务的情况下,确定该任务对应的连接是否关闭,若是,则结束该任务,若否,则保持持有该任务。
本说明书实施例所提供的技术方案,通过使用epoll技术,可以免去任务队列,使生产者线程分发任务时不必加锁,从而避免多个消费者线程的等待,提高任务分发与领取效率。此外,消费者线程得到任务后,针对长连接,可以持有该任务,不再回收重新分配,且消费者线程可以监听多个持有的任务,从而提高各个消费者线程处理任务的效率。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书实施例。
此外,本说明书实施例中的任一实施例并不需要达到上述的全部效果。
附图说明
为了更清楚地说明本说明书实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书实施例中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1是本说明书实施例任务处理方法的流程示意图;
图2是本说明书实施例任务处理装置的结构示意图;
图3是用于配置本说明书实施例装置的一种设备的结构示意图。
具体实施方式
为了使本领域技术人员更好地理解本说明书实施例中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行详细地描述,显然,所描述的实施例仅仅是本说明书的一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于保护的范围。
在多线程模式的网络数据处理设备中,通常由一个生产者线程生产产品,并将所生产的产品提供给若干个消费者线程进行消费。为了使生产者线程和消费者线程能并发执行,通常在两者之间设置多个任务队列,生产者线程将所生产的产品放入队列中,消费者线程可以从队列中取走产品进行消费。
显然,生产者线程和消费者线程之间必须保持同步,即不允许消费者线程到一个空的队列中取产品,也不允许生产者线程向一个满的队列中再放入产品。此外,在各个不同的消费者线程从队列中取产品时,如果多个消费者线程同时对同一个队列进行操作,则有可能造成数据不一致或数据污染。
为了解决上述问题,现有技术中一般采取2种方案。
其一,是采用信号量配合互斥锁的方案。通过设定2个信号量,信号量empty用来表示空队列的个数,信号量full用来表示满队列的个数。
生产者线程在向一个队列中放入任务(即产品)时,可以调用sem_wait(&full)来检查队列是否已满。如果确定队列已满,则将队列设置为阻塞,直到有消费者线程从队列中取走任务再设置为非阻塞;如果确定队列未满,则将任务放入该队列中,并通知消费者线程来领取任务。
消费者线程在从一个队列中领取任务时,可以调用sem_wait(&empty)来检查队列是否为空,如果确定队列为空,则将队列设置为阻塞,直到有生产者线程向队列中放入任务再设置为非阻塞;如果确定队列未空,则从队列中领取任务,并通知生产者线程来放入任务。
此外,本方案中还可以通过互斥锁防止多个线程同时对同一个队列进行操作,造成数据不一致或者数据污染。
其二,是采用条件变量配合互斥锁的方案。可以预先为队列设置某些条件,当确定队列不满足所预设的条件时,便设置为阻塞,直到有线程通知队列时再设置为非阻塞。具体地,生产者线程在向一个队列中放入任务、或者消费者线程在从一个队列中领取任务时,可以调用sem_wait()分别检查队列是否满足条件、以及队列是否阻塞,从而采取与对应的动作。
在本方案中,条件变量可以根据需求灵活地设置,但是要注意避免因逻辑关系错误造成锁死。此外,本方案中还可以通过互斥锁防止多个线程同时对同一个队列进行操作,造成数据不一致或者数据污染。
上述2种方案均存在的问题是,各个消费者线程共用任务队列,即所有消费者线程在争抢任务,在每一次任务分发中,即在每次存在一个消费者线程从队列中领取任务时,均将为队列加互斥锁,避免造成数据不一致的同时,也将使得其他消费者线程进入等待状态,直到该消费者线程领取完成任务并解锁后,下一个消费者线程才能够领取任务,导致任务处理效率较低,浪费CPU资源。
此外网络数据处理设备中的一个消费者线程一次只处理一个任务,并且,消费者线程在处理完当前任务后将进入等待任务状态。而如果所处理的任务为长连接,该长连接上会进行多次的数据交互,因此该任务会被生产者线程多次放入队列中进行分发。因此,当设备中数据量加大时,除了新建的任务,生产者线程还需要分发长连接任务,将增加生产者线程的负担。
针对现有技术存在的问题,本说明书提供一种任务处理方法,在该方法中,生产者线程预先创建包括至少1个消费者线程的线程池。本说明书实施例中并不限定消费者线程的个数,例如,对于多核处理器,可以根据CPU的个数创建对应的消费者线程,如可以为每个CPU创建1个消费者线程,等等,本领域技术人员可以根据实际需求灵活地设置。
参见图1所示,本说明书提供的任务处理方法可以包括以下步骤:
S101,所述生产者线程监听是否产生新的连接请求,并且在监听到新的连接请求的情况下,基于Epoll技术新建任务;
本说明书实施例中,生产者线程具体可以通过多种方式,监听是否产生新的连接请求。
在本说明书实施例的一种具体实施方式中,生产者线程可以创建用于监听套接字Socket的监听描述符Listen Socket,并将所创建的监听描述符Listen Socket设定为非阻塞模式。然后,通过调用监听函数Listen()监听套接字,而监听函数如果监听到套接字有新的连接请求,则可以返回所创建的监听描述符。
在监听到新的连接请求的情况下,可以进一步地基于Epoll技术新建任务,Epoll对于句柄事件的选择不是遍历的,是事件响应的,即当句柄上事件来时可以立即选择出来,而不需要遍历整个句柄链表,因此本说明书采用Epoll技术新建任务,从而提高任务处理效率。
本说明书实施例中,生产者线程具体可以通过多种方式,基于Epoll技术新建任务。
在本说明书实施例的一种具体实施方式中,可以在监听到新的连接请求的情况下,调用接收函数accept()获得套接字描述符,在接收到套接字描述符后,将所接收到的套接字描述符设定为非阻塞模式,并且新建包括所接收到的套接字描述符的任务,并且将所新建的任务添加到epoll_data联合体。
此外,还可以在epoll_event结构中,设置要处理的事件类型为读和写,设置工作方式为epoll_ET。
S102,所述生产者线程根据预设任务分发规则,从所述线程池中确定符合该规则的任一消费者线程,将所新建的任务基于Epoll技术分发至该消费者线程;
本说明书实施例中并不限定具体的任务分发规则,本领域技术人员可以根据实际需求灵活地设置。
在本说明书实施例的一种具体实施方式中,可以设置将任务分发给当前持有任务最少的消费者线程。具体地,生产者线程可以为预先创建的任一消费者线程,对应设置该线程的当前持有任务计数。从而,在需要进行任务分发时,获得所述预先创建的线程池中各消费者线程的当前持有任务计数,并将当前持有任务计数最小的任一消费者线程,确定为符合预设任务分发规则的消费者线程。
例如,假设生产者线程预先创建了3个消费者线程,并且获得消费者线程A的当前持有任务计数为4,消费者线程B的当前持有任务计数为1,消费者线程C的当前持有任务计数为3,则可以将消费者线程B确定为符合预设任务分发规则的消费者线程,从而将任务分发给消费者线程B。
又如,假设获得消费者线程A的当前持有任务计数为4,消费者线程B的当前持有任务计数同样为4,消费者线程C的当前持有任务计数为3,则可以随机地或通过其他规则条件,确定消费者线程A、B中的任一个为符合预设任务分发规则的消费者线程,从而将任务分发给所确定的消费者线程。
此外,在将所新建的任务基于Epoll技术分发至该消费者线程时,具体地,可以使用epoll_ctl()将生成的epoll_event结构注册到该线程的epoll_fd监听事件中,并且,可以进一步地将该线程的任务计数加一。
S103,所述消费者线程基于Epoll技术确定是否接收到所述生产者线程分发的任务,并在接收到任务后,执行所接收的任务;
本说明书实施例中,消费者线程具体可以通过多种方式,基于Epoll技术确定是否接收到所述生产者线程分发的任务。
在本说明书实施例的一种具体实施方式中,可以首先使用epoll_create()函数创建文件描述,然后调用Epoll等待函数epoll_wait()等待Epoll事件发生,即等待接收到生产者线程分发的任务。具体地,如果epoll事件表明socket描述符上有数据可读,取出epoll_data联合体,即可以获取到任务,从而执行该任务。
S104,所述消费者线程在完成所接收任务的情况下,确定该任务对应的连接是否关闭,若是,则结束该任务,若否,则保持持有该任务。
如果预先为消费者线程设置了对应的当前持有任务技术,并且在任务分发后对计数加一,则结束任务后还可以进一步地对计数减一。
可见,应用上述技术方案,通过使用epoll技术,可以免去任务队列,使生产者线程分发任务时不必加锁,从而避免多个消费者线程的等待,提高任务分发与领取效率,并且生产者线程可以优先给当前任务持有数最少的消费者分发任务。此外,消费者线程得到任务后,针对长连接,可以持有该任务,不再回收重新分配,且消费者线程可以监听多个持有的任务,从而提高各个消费者线程处理任务的效率。
相应于上述方法实施例,本说明书实施例还提供一种任务处理装置,参见图2所示,该装置可以包括:生产者线程10、以及生产者线程预先创建的包括至少1个消费者线程20的线程池;
所述生产者线程10包括:
任务创建模块110,用于监听是否产生新的连接请求,并且在监听到新的连接请求的情况下,基于Epoll技术新建任务;
任务分发模块120,用于根据预设任务分发规则,从所述线程池中确定符合该规则的任一消费者线程,将所新建的任务基于Epoll技术分发至该消费者线程;
所述消费者线程20包括:
任务接收模块210,用于基于Epoll技术确定是否接收到所述生产者线程分发的任务,并在接收到任务后,执行所接收的任务;
持有判定模块220,用于在完成所接收任务的情况下,确定该任务对应的连接是否关闭,若是,则结束该任务,若否,则保持持有该任务。
在本说明书实施例的一种具体实施方式中,所述生产者线程10具体通过以下方式监听是否产生新的连接请求:
创建用于监听套接字的监听描述符,并将所创建的监听描述符设定为非阻塞模式;
调用监听函数监听套接字;其中该,所述监听函数在监听到套接字有新的连接请求的情况下,返回所创建的监听描述符。
在本说明书实施例的一种具体实施方式中,所述生产者线程10具体通过以下方式在监听到新的连接请求的情况下,基于Epoll技术新建任务:
在监听到新的连接请求的情况下,调用接收函数获得套接字描述符,并将所接收到的套接字描述符设定为非阻塞模式;
新建包括所接收到的套接字描述符的任务;
将所新建的任务添加到epoll_data联合体。
在本说明书实施例的一种具体实施方式中,所述生产者线程10为预先创建的任一消费者线程,对应设置该线程的当前持有任务计数;
所述生产者线程10具体通过以下方式根据预设任务分发规则,从所述线程池中确定符合该规则的任一消费者线程:
获得所述预先创建的线程池中各消费者线程的当前持有任务计数;
将当前持有任务计数最小的任一消费者线程,确定为符合预设任务分发规则的消费者线程。
在本说明书实施例的一种具体实施方式中,所述消费者线程20具体通过以下方式基于Epoll技术确定是否接收到所述生产者线程分发的任务:
调用Epoll等待函数等待Epoll事件发生,所述Epoll事件为接收到生产者线程分发的任务。
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
图3示出了本说明书实施例所提供的一种更为具体的计算设备硬件结构示意图,该设备可以包括:处理器1010、存储器1020、输入/输出接口1030、通信接口1040和总线1050。其中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。
处理器1010可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。
存储器1020可以采用ROM(Read Only Memory,只读存储器)、RAM(Random AccessMemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1020可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。
输入/输出接口1030用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
通信接口1040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。
总线1050包括一通路,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息。
需要说明的是,尽管上述设备仅示出了处理器1010、存储器1020、输入/输出接口1030、通信接口1040以及总线1050,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
虽然本说明书包含许多具体实施细节,但是这些不应被解释为限制任何发明的范围或所要求保护的范围,而是主要用于描述特定发明的具体实施例的特征。本说明书内在多个实施例中描述的某些特征也可以在单个实施例中被组合实施。另一方面,在单个实施例中描述的各种特征也可以在多个实施例中分开实施或以任何合适的子组合来实施。此外,虽然特征可以如上所述在某些组合中起作用并且甚至最初如此要求保护,但是来自所要求保护的组合中的一个或多个特征在一些情况下可以从该组合中去除,并且所要求保护的组合可以指向子组合或子组合的变型。
类似地,虽然在附图中以特定顺序描绘了操作,但是这不应被理解为要求这些操作以所示的特定顺序执行或顺次执行、或者要求所有例示的操作被执行,以实现期望的结果。在某些情况下,多任务和并行处理可能是有利的。此外,上述实施例中的各种系统模块和组件的分离不应被理解为在所有实施例中均需要这样的分离,并且应当理解,所描述的程序组件和系统通常可以一起集成在单个软件产品中,或者封装成多个软件产品。
由此,主题的特定实施例已被描述。其他实施例在所附权利要求书的范围以内。在某些情况下,权利要求书中记载的动作可以以不同的顺序执行并且仍实现期望的结果。此外,附图中描绘的处理并非必需所示的特定顺序或顺次顺序,以实现期望的结果。在某些实现中,多任务和并行处理可能是有利的。
以上所述仅为本说明书实施例的较佳实施例而已,并不用以限制本说明书实施例,凡在本说明书实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书实施例保护的范围之内。

Claims (10)

1.一种任务处理方法,其特征在于,生产者线程预先创建包括至少1个消费者线程的线程池,所述方法包括:
所述生产者线程监听是否产生新的连接请求,并且在监听到新的连接请求的情况下,基于Epoll技术新建任务;
所述生产者线程根据预设任务分发规则,从所述线程池中确定符合该规则的任一消费者线程,将所新建的任务基于Epoll技术分发至该消费者线程,以避免将所述新建的任务放入到任务队列;
所述消费者线程基于Epoll技术确定是否接收到所述生产者线程分发的任务,并在接收到任务后,执行所接收的任务;
所述消费者线程在完成所接收任务的情况下,确定该任务对应的连接是否关闭,若是,则结束该任务,若否,则保持持有该任务,以监听多个持有任务。
2.根据权利要求1所述的方法,其特征在于,所述监听是否产生新的连接请求,包括:
创建用于监听套接字的监听描述符,并将所创建的监听描述符设定为非阻塞模式;
调用监听函数监听套接字;其中,所述监听函数在监听到套接字有新的连接请求的情况下,返回所创建的监听描述符。
3.根据权利要求1所述的方法,其特征在于,所述在监听到新的连接请求的情况下,基于Epoll技术新建任务,包括:
在监听到新的连接请求的情况下,调用接收函数获得套接字描述符,并将所接收到的套接字描述符设定为非阻塞模式;
新建包括所接收到的套接字描述符的任务;
将所新建的任务添加到epoll_data联合体。
4.根据权利要求3所述的方法,其特征在于,所述生产者线程为预先创建的任一消费者线程,对应设置该线程的当前持有任务计数;
所述根据预设任务分发规则,从所述线程池中确定符合该规则的任一消费者线程,包括:
获得所述预先创建的线程池中各消费者线程的当前持有任务计数;
将当前持有任务计数最小的任一消费者线程,确定为符合预设任务分发规则的消费者线程。
5.根据权利要求1所述的方法,其特征在于,所述基于Epoll技术确定是否接收到所述生产者线程分发的任务,包括:
调用Epoll等待函数等待Epoll事件发生,所述Epoll事件为接收到生产者线程分发的任务。
6.一种任务处理装置,其特征在于,所述装置包括:生产者线程、以及生产者线程预先创建的包括至少1个消费者线程的线程池;
所述生产者线程监听是否产生新的连接请求,并且在监听到新的连接请求的情况下,基于Epoll技术新建任务;
所述生产者线程根据预设任务分发规则,从所述线程池中确定符合该规则的任一消费者线程,将所新建的任务基于Epoll技术分发至该消费者线程,以避免将所述新建的任务放入到任务队列;
所述消费者线程基于Epoll技术确定是否接收到所述生产者线程分发的任务,并在接收到任务后,执行所接收的任务;
所述消费者线程在完成所接收任务的情况下,确定该任务对应的连接是否关闭,若是,则结束该任务,若否,则保持持有该任务,以监听多个持有任务。
7.根据权利要求6所述的装置,其特征在于,所述生产者线程具体通过以下方式监听是否产生新的连接请求:
创建用于监听套接字的监听描述符,并将所创建的监听描述符设定为非阻塞模式;
调用监听函数监听套接字;其中该,所述监听函数在监听到套接字有新的连接请求的情况下,返回所创建的监听描述符。
8.根据权利要求6所述的装置,其特征在于,所述生产者线程具体通过以下方式在监听到新的连接请求的情况下,基于Epoll技术新建任务:
在监听到新的连接请求的情况下,调用接收函数获得套接字描述符,并将所接收到的套接字描述符设定为非阻塞模式;
新建包括所接收到的套接字描述符的任务;
将所新建的任务添加到epoll_data联合体。
9.根据权利要求8所述的装置,其特征在于,所述生产者线程为预先创建的任一消费者线程,对应设置该线程的当前持有任务计数;
所述生产者线程具体通过以下方式根据预设任务分发规则,从所述线程池中确定符合该规则的任一消费者线程:
获得所述预先创建的线程池中各消费者线程的当前持有任务计数;
将当前持有任务计数最小的任一消费者线程,确定为符合预设任务分发规则的消费者线程。
10.根据权利要求6所述的装置,其特征在于,所述消费者线程具体通过以下方式基于Epoll技术确定是否接收到所述生产者线程分发的任务:
调用Epoll等待函数等待Epoll事件发生,所述Epoll事件为接收到生产者线程分发的任务。
CN201811581669.9A 2018-12-24 2018-12-24 一种任务处理方法及装置 Active CN109684091B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811581669.9A CN109684091B (zh) 2018-12-24 2018-12-24 一种任务处理方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811581669.9A CN109684091B (zh) 2018-12-24 2018-12-24 一种任务处理方法及装置

Publications (2)

Publication Number Publication Date
CN109684091A CN109684091A (zh) 2019-04-26
CN109684091B true CN109684091B (zh) 2021-04-27

Family

ID=66189098

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811581669.9A Active CN109684091B (zh) 2018-12-24 2018-12-24 一种任务处理方法及装置

Country Status (1)

Country Link
CN (1) CN109684091B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110245006B (zh) * 2019-05-07 2023-05-02 深圳壹账通智能科技有限公司 区块链事务的处理方法、装置、设备及存储介质
CN110888727B (zh) * 2019-11-26 2022-07-22 北京达佳互联信息技术有限公司 并发无锁队列实现方法、装置及存储介质
CN113687898B (zh) * 2021-08-24 2024-02-27 天津津航计算技术研究所 道系统下基于qt开发的多点触控功能实现方法

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9276903B2 (en) * 2007-01-11 2016-03-01 Nice-Systems Ltd. Branch IP recording
CN103312625B (zh) * 2012-03-09 2016-02-03 深圳市腾讯计算机系统有限公司 一种网络通信的方法和系统
CN105049162A (zh) * 2015-05-21 2015-11-11 北京科东电力控制系统有限责任公司 基于Epoll模型的公网信息高效传输方法
CN106302554A (zh) * 2016-11-08 2017-01-04 郑州云海信息技术有限公司 一种socket通信方法、装置和存储设备
CN107479955B (zh) * 2017-08-04 2020-04-17 南京华飞数据技术有限公司 一种基于Epoll异步服务器的高效响应方法

Also Published As

Publication number Publication date
CN109684091A (zh) 2019-04-26

Similar Documents

Publication Publication Date Title
CN109684091B (zh) 一种任务处理方法及装置
CN102147746B (zh) 动态线程池管理系统及管理方法
US9563474B2 (en) Methods for managing threads within an application and devices thereof
TW201837733A (zh) 一種區塊鏈共識方法、設備及系統
CN108694199A (zh) 数据同步装置、方法、存储介质及电子设备
CN109656782A (zh) 可视化调度监控方法、装置及服务器
CN110300959B (zh) 用于动态运行时任务管理的方法、系统、设备、装置和介质
CN109783255B (zh) 数据解析分发装置及高并发数据处理方法
CN115840631B (zh) 基于raft的高可用分布式任务调度方法和设备
CN108885559A (zh) 在多个处理器之间快速转移工作负载
CN103617088A (zh) 在处理器不同类型线程中分配内核资源的方法、装置及其处理器
CN107870800A (zh) 虚拟机活跃性检测
WO2022160628A1 (zh) 命令处理装置、方法、电子设备以及计算机可读存储介质
CN112817992B (zh) 执行更改任务的方法、装置、电子设备以及可读存储介质
CN110716805A (zh) 图形处理器的任务分配方法、装置、电子设备及存储介质
CN109697128A (zh) 一种线程维护方法、装置及电子设备
CN107832144B (zh) 分布式并行计算方法和装置
US9032251B2 (en) Re-forming an application control tree without terminating the application
CN115408117A (zh) 协程运行方法、装置、计算机设备和存储介质
JP7122299B2 (ja) 処理タスクを実行するための方法、装置、デバイス、および記憶媒体
CN112860401A (zh) 任务调度方法、装置、电子设备和存储介质
CN106293670B (zh) 一种事件处理方法、设备及一种服务器
CN103678537A (zh) 基于集群的元数据修改方法、装置及节点设备
KR20180082560A (ko) 태스크의 시간-기반 스케줄링을 위한 방법 및 장치
US11474868B1 (en) Sharded polling system

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
GR01 Patent grant
GR01 Patent grant