CN106484498A - 基于Node的事件处理方法及相关服务端设备 - Google Patents
基于Node的事件处理方法及相关服务端设备 Download PDFInfo
- Publication number
- CN106484498A CN106484498A CN201510547998.1A CN201510547998A CN106484498A CN 106484498 A CN106484498 A CN 106484498A CN 201510547998 A CN201510547998 A CN 201510547998A CN 106484498 A CN106484498 A CN 106484498A
- Authority
- CN
- China
- Prior art keywords
- event
- intensive calculations
- secondary processor
- processor
- call
- 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
Landscapes
- Telephonic Communication Services (AREA)
Abstract
本公开是关于一种基于Node的事件处理方法及相关服务端设备,其事件处理线程在遇到密集计算事件时,调用辅助处理器,并由该辅助处理器来执行该密集计算事件,从而事件处理线程所在的主处理器可以继续读取并处理下一个待处理事件,避免密集计算事件相关的大量运算操作长时间占用事件处理线程,提高事件处理线程对密集计算事件的处理效率,避免阻塞现象,进而提高相关设备或系统的性能。
Description
技术领域
本公开涉及事件处理技术领域,尤其涉及一种基于Node的事件处理方法及相关服务端设备。
背景技术
Node是一个基于Google V8引擎建立的Javascript脚本运行平台,应用于服务端,用于方便地搭建响应速度快、易于扩展的网络应用。Node的一个主要特性为使用单线程处理方式,即同一时刻Node中只存在一个事件处理线程,所有Javascript代码均由该事件处理线程执行,可以避免多线程编程需要时刻注意状态同步的问题,避免代码在运行过程中出现死锁现象,同时消除线程切换造成的性能开销。
但是,单线程处理方式的引入,也使得Node只有在处理完当前事件后,才可以处理另一个事件,造成Node对密集计算事件的处理能力较差。具体的,所谓密集计算事件,即运算操作占用主要事件处理时间,其他操作(如,数据的读/写)所占时间很少甚至可以忽略不计的事件,如大循环、图像处理等;有鉴于此,Node在处理所述密集计算事件时,运行于处理器中的事件处理线程需要被长时间占用来执行具体的运算操作。
如图1所示的信号流图,基于Node的事件处理线程(运行于中央处理器(CentralProcessing Unit,CPU)中)在处理请求2对应的密集计算事件时,虽然先后接收到I/O设备返回的请求1对应的目标数据,以及客户端发送的请求3,但都无法处理,只能将其存入事件队列,待请求2处理完成后,再先后从事件队列中读取并处理,将I/O设备返回的数据转发给客户端,通过异步调用方式通知I/O设备返回请求3对应的目标数据,严重影响了服务端对客户端的响应速度。
可见,现有基于Node的事件处理方法在遇到密集计算事件时,处理器资源被长时间占用,使得系统处于阻塞状态,系统整体性能下降。
发明内容
为克服相关技术中存在的问题,本公开提供一种基于Node的事件处理方法及相关服务端设备。
本公开第一方面提供一种基于Node的事件处理方法,包括:
判断待处理事件是否为密集计算事件;
如果所述待处理事件为密集计算事件,则调用辅助处理器,以触发所述辅助处理器处理所述待处理事件;
通过回调函数获取所述辅助处理器的处理结果。
结合第一方面,在第一方面第一种可行的实施方式中,所述辅助处理器包括:图形处理器GPU。
结合第一方面,或者第一方面第一种可行的实施方式,在第一方面第二种可行的实施方式中,所述调用辅助处理器,包括:异步调用辅助处理器。
结合第一方面第二种可行的实施方式,在第一方面第三种可行的实施方式中,所述异步调用辅助处理器包括:
通过基于C语言的指令与所述辅助处理器交互,将所述待处理事件发送至所述辅助处理器。
结合第一方面,或者第一方面第一种可行的实施方式,在第一方面第四种可行的实施方式中,所述事件处理方法还包括:
检测是否存在来自客户端的密集计算请求;
在检测到所述密集计算请求时,将其封装为密集计算事件,并将所述密集计算事件存入事件队列。
本公开第二方面提供一种基于Node的服务端设备,包括:主处理器和辅助处理器;
其中,所述主处理器包括:事件类型判断单元和事件处理调度单元;
所述事件类型判断单元用于,判断待处理事件是否为密集计算事件;
所述事件处理调度单元用于,在所述待处理事件为密集计算事件时,调用所述辅助处理器,以触发所述辅助处理器处理所述待处理事件;
所述辅助处理器用于,在被调用后,处理所述待处理事件,并通过回调函数将处理结果返回至所述主处理器。
结合第二方面,在第二方面第一种可行的实施方式中,所述辅助处理器包括:图形处理器GPU。
结合第二方面,或者第二方面第一种可行的实施方式,在第二方面第二种可行的实施方式中,为实现调用所述辅助处理器,所述事件处理调度单元被配置为:异步调用辅助处理器。
结合第二方面第二种可行的实施方式,在第二方面第三种可行的实施方式中,为实现异步调用所述辅助处理器,所述事件处理调度单元被配置为:
通过基于C语言的指令与所述辅助处理器交互,将所述待处理事件发送至所述辅助处理器。
结合第二方面,或者第二方面第一种可行的实施方式,在第二方面第四种可行的实施方式中,所述服务端设备还包括:
密集计算事件监听器,用于检测是否存在来自客户端的密集计算请求,在检测到所述密集计算请求时,将其封装为密集计算事件,并将所述密集计算事件存入事件队列,以待所述事件类型判断单元读取并处理。
由上述技术方案可知,本公开中基于Node的事件处理线程在遇到密集计算事件时,调用辅助处理器,并由该辅助处理器来执行该密集计算事件,从而主处理器可以继续读取并处理下一个待处理事件,避免密集计算事件相关的大量运算操作长时间占用事件处理线程,提高事件处理线程对密集计算事件的处理效率,避免阻塞现象,进而提高相关设备或系统的性能。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
图1是现有基于Node的事件处理方法的信号流图。
图2是根据一示例性实施例示出的基于Node的事件处理方法的流程图。
图3是根据一示例性实施例示出的基于Node的事件处理方法的信号流图。
图4是根据一示例性实施例示出的一种基于Node的服务端设备的框图。
图5是根据一示例性实施例示出的另一种基于Node的服务端设备的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。
图2是根据一示例性实施例示出的一种基于Node的事件处理方法的流程图。参照图2,该方法包括以下步骤。
S11、获取待处理事件;
S12、判断所述待处理事件是否为密集计算事件,如果是,则执行步骤S13,否则执行步骤S14。
上述密集计算事件,即运算操作占用主要事件处理时间,其他操作(如,数据的读/写)所占时间很少甚至可以忽略不计的事件,如大循环、图像处理等事件。
S13、如果所述待处理事件为密集计算事件,则调用辅助处理器,以触发所述辅助处理器处理所述待处理事件,并通过回调函数获取所述辅助处理器的处理结果。
上述辅助处理器可以为具有通用计算能力的任一处理器,优选计算能力强的处理器。本申请实施例中,基于Node的事件处理线程在确认待处理事件为密集计算事件时,不再在该事件处理线程内处理该密集计算事件,也即不再如现有技术一样由该事件处理线程所在的主处理器(如CPU)执行密集计算事件相关的大量运算操作,而是调用辅助处理器,并由该辅助处理器来执行该密集计算事件,从而主处理器可以继续读取并处理下一个待处理事件,避免密集计算事件相关的大量运算操作长时间占用事件处理线程。可见,本实施例提供的事件处理方法相当于将密集计算事件委托给更擅长执行运算操作的辅助处理器,擅长复杂逻辑处理的主处理器只负责事件循环队列的调度,可以提高各个硬件资源的利用率,从而可以整体提高相关设备或系统(如Node服务器)的性能。
主处理器在通过回调函数获取辅助处理器对密集计算事件的处理结果后,可以通过运行该回调函数完成该密集计算事件的后续处理逻辑(如编辑数据格式等),并将回调函数的处理结果反馈给发送相应密集计算请求的客户端。
S14、如果所述待处理事件不是密集计算事件,则采用现有的事件处理方法处理所述待处理事件。
对于密集计算事件之外的其他类型的事件,可仍由主处理器基于现有技术中基于Node的事件处理方法;例如,采用非阻塞I/O方式处理I/O请求事件。
为更直观的说明本实施例与现有技术的区别,图3示出了相对于图1所示信号流图,对于相同的3个请求,当采用本申请所述的事件处理方法时的信号流。
参照图3,运行于CPU(主处理器)中的事件处理线程在开始处理请求2对应的事件时,确定请求2对应的事件(当前的待处理事件)为密集计算事件,故调用辅助处理器,即将密集计算事件委托给辅助处理器来处理;在辅助处理器处理请求2的同时,事件处理线程可以继续处理下一个事件,即将I/O设备返回的请求1对应的目标数据及时将其反馈至客户端;对于请求3,无论其发起时辅助处理设备是否已完成对请求2的处理,都可以及时通知I/O设备返回请求3对应的目标数据。因此,图3所示信号流图中不存在图1所示的阻塞现象。
由以上描述可知,本实施例提供的事件处理方法,基于Node的事件处理线程在遇到密集计算事件时,调用辅助处理器,并由该辅助处理器来执行该密集计算事件,从而主处理器可以继续读取并处理下一个待处理事件,避免密集计算事件相关的大量运算操作长时间占用事件处理线程,提高事件处理线程对密集计算事件的处理效率,避免阻塞现象,进而提高相关设备或系统的性能。
在本申请一个可行的实施例中,上述通过回调函数获取所述辅助处理器的处理结果,具体可以为:主处理器在调用辅助处理器时,将待处理的密集计算事件和回调函数的指针(即该回调函数的地址)一并发送至辅助处理器,从而辅助处理器在得到处理结果后,可以根据该指针寻址到回调函数,进而将处理结果输入该回调函数返回至主处理器。
在本申请另一个可行的实施例中,上述辅助处理器具体可以采用图形处理器(Graphics Processing Unit,GPU)。
GPU中设置有大量的执行单元,具有强于CPU数倍的计算能力;因此,相对于现有事件处理方法,本实施例利用GPU处理密集计算事件,可以用更少的时间完成相同的计算任务,从而可以更快的向事件处理线程返回处理结果,进一步提高相关设备或系统的整体性能。
在本申请又一个可行的实施例中,上述步骤S13所述的调用辅助处理器,可以为:异步调用所述辅助处理器。更具体的,可以通过如下方式实现异步调用所述辅助处理器:通过基于C语言的指令与所述辅助处理器交互,将所述密集计算事件发送至所述辅助处理器;即,通过在主处理器中设置基于C语言的扩展模块,实现主处理器与辅助处理器的应用程序编程接口(Application Programming Interface,API)进行关联。
在本申请另一个可行的实施例中,上述基于Node的事件处理方法还包括如下步骤:
检测是否存在来自客户端的密集计算请求,如果检测到密集计算请求,将其封装为密集计算事件,并将所述密集计算事件存入事件队列。
基于Node的事件处理方法,采用事件循环机制中,即事件处理线程循环检测事件队列中是否存在未处理事件,并逐个读取并处理检测到的未处理事件,即步骤S11实际是从事件队列中获取待处理事件;因此,本申请实施例可以在基于Node的设备或系统中设置对应密集计算请求的事件监听器,以实时检测是否接收到来自客户端的密集计算请求,如果检测到密集计算请求,则将其封装为密集计算事件并存入事件队列,以待事件处理线程统一调度处理。
图4是根据一示例性实施例示出的一种基于Node的服务端设备的框图;例如,该服务端设备可以为Node服务器。参照图4,该服务端设备至少包括主处理器100和辅助处理器200。
其中,上述主处理器100一般为CPU,具体包括:事件类型判断单元101和事件处理调度单元102。
该事件类型判断单元101被配置为:判断待处理事件是否为密集计算事件。
该事件处理调度单元102被配置为:在所述待处理事件为密集计算事件时,调用所述辅助处理器200,以触发所述辅助处理器200处理所述待处理事件。
上述辅助处理器200用于,在被调用后,处理所述待处理事件,并通过回调函数将处理结果返回至所述主处理器100。
由以上技术方案可知,本实施例提供的基于Node的服务端设备中,事件处理线程在遇到密集计算事件时,调用辅助处理器,并由该辅助处理器来执行该密集计算事件,从而主处理器可以继续读取并处理下一个待处理事件,避免密集计算事件相关的大量运算操作长时间占用事件处理线程,提高事件处理线程对密集计算事件的处理效率,避免阻塞现象,进而提高相关设备或系统的性能。
在本申请一个可行的实施例中,上述辅助处理器200具体可以为GPU(即,图形处理器)。
在本申请另一个可行的实施例中,事件处理调度单元102调用辅助处理器200时,可以采用异步调用的方式;更具体的,可以通过基于C语言的指令与辅助处理器200交互,将所述密集计算事件发送至辅助处理器200。
参照图5,本申请实例提供的另一种基于Node的服务端设备,还可以包括密集计算事件监听器300。该密集计算事件监听器300用于,检测是否存在来自客户端的密集计算请求,在检测到所述密集计算请求时,将其封装为密集计算事件,并将所述密集计算事件存入事件队列,以待事件类型判断单元101读取并处理。
关于上述实施例中的装置,其中各个部件执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本发明的其它实施方案。本申请旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由下面的权利要求指出。
应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求来限制。
Claims (10)
1.一种基于Node的事件处理方法,其特征在于,包括:
判断待处理事件是否为密集计算事件;
如果所述待处理事件为密集计算事件,则调用辅助处理器,以触发所述辅助处理器处理所述待处理事件;
通过回调函数获取所述辅助处理器的处理结果。
2.根据权利要求1所述的事件处理方法,其特征在于,所述辅助处理器包括:图形处理器GPU。
3.根据权利要求1或2所述的事件处理方法,其特征在于,所述调用辅助处理器,包括:
异步调用辅助处理器。
4.根据权利要求3所述的事件处理方法,其特征在于,所述异步调用辅助处理器包括:
通过基于C语言的指令与所述辅助处理器交互,将所述待处理事件发送至所述辅助处理器。
5.根据权利要求1或2所述的事件处理方法,其特征在于,所述事件处理方法还包括:
检测是否存在来自客户端的密集计算请求;
在检测到所述密集计算请求时,将其封装为密集计算事件,并将所述密集计算事件存入事件队列。
6.一种基于Node的服务端设备,其特征在于,包括:主处理器和辅助处理器;
其中,所述主处理器包括:事件类型判断单元和事件处理调度单元;
所述事件类型判断单元用于,判断待处理事件是否为密集计算事件;
所述事件处理调度单元用于,在所述待处理事件为密集计算事件时,调用所述辅助处理器,以触发所述辅助处理器处理所述待处理事件;
所述辅助处理器用于,在被调用后,处理所述待处理事件,并通过回调函数将处理结果返回至所述主处理器。
7.根据权利要求6所述的服务端设备,其特征在于,所述辅助处理器包括:图形处理器GPU。
8.根据权利要求6或7所述的服务端设备,其特征在于,为实现调用所述辅助处理器,所述事件处理调度单元被配置为:异步调用辅助处理器。
9.根据权利要求8所述的服务端设备,其特征在于,为实现异步调用所述辅助处理器,所述事件处理调度单元被配置为:
通过基于C语言的指令与所述辅助处理器交互,将所述待处理事件发送至所述辅助处理器。
10.根据权利要求6或7所述的服务端设备,其特征在于,还包括:
密集计算事件监听器,用于检测是否存在来自客户端的密集计算请求,在检测到所述密集计算请求时,将其封装为密集计算事件,并将所述密集计算事件存入事件队列,以待所述事件类型判断单元读取并处理。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510547998.1A CN106484498A (zh) | 2015-08-31 | 2015-08-31 | 基于Node的事件处理方法及相关服务端设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510547998.1A CN106484498A (zh) | 2015-08-31 | 2015-08-31 | 基于Node的事件处理方法及相关服务端设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106484498A true CN106484498A (zh) | 2017-03-08 |
Family
ID=58236270
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510547998.1A Pending CN106484498A (zh) | 2015-08-31 | 2015-08-31 | 基于Node的事件处理方法及相关服务端设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106484498A (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101025822A (zh) * | 2006-06-05 | 2007-08-29 | 威盛电子股份有限公司 | 具有独立输出的交换开关系统及其方法 |
CN101599009A (zh) * | 2009-04-30 | 2009-12-09 | 浪潮电子信息产业股份有限公司 | 一种异构多处理器上并行执行任务的方法 |
CN104424033A (zh) * | 2013-09-02 | 2015-03-18 | 联想(北京)有限公司 | 一种电子设备及数据处理方法 |
CN104598428A (zh) * | 2015-01-14 | 2015-05-06 | 深圳光启空间技术有限公司 | 数据处理系统 |
CN104769552A (zh) * | 2012-11-09 | 2015-07-08 | 高通股份有限公司 | 向辅助处理器暴露主机操作系统服务 |
-
2015
- 2015-08-31 CN CN201510547998.1A patent/CN106484498A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101025822A (zh) * | 2006-06-05 | 2007-08-29 | 威盛电子股份有限公司 | 具有独立输出的交换开关系统及其方法 |
CN101599009A (zh) * | 2009-04-30 | 2009-12-09 | 浪潮电子信息产业股份有限公司 | 一种异构多处理器上并行执行任务的方法 |
CN104769552A (zh) * | 2012-11-09 | 2015-07-08 | 高通股份有限公司 | 向辅助处理器暴露主机操作系统服务 |
CN104424033A (zh) * | 2013-09-02 | 2015-03-18 | 联想(北京)有限公司 | 一种电子设备及数据处理方法 |
CN104598428A (zh) * | 2015-01-14 | 2015-05-06 | 深圳光启空间技术有限公司 | 数据处理系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Zhang et al. | {G-NET}: Effective {GPU} Sharing in {NFV} Systems | |
US20200120120A1 (en) | Techniques for network inspection for serverless functions | |
JP6437579B2 (ja) | 仮想化環境におけるインテリジェントgpuスケジューリング | |
CN107450971B (zh) | 任务处理方法及装置 | |
US10922140B2 (en) | Resource scheduling system and method under graphics processing unit virtualization based on instant feedback of application effect | |
US20170004005A1 (en) | Exception handling in microprocessor systems | |
CN108156181B (zh) | 一种基于协程异步io的漏洞探测方法及其漏洞扫描系统 | |
US10572301B2 (en) | Extract CPU time facility | |
CN105068859B (zh) | 一种跨虚拟机的多服务调用方法及系统 | |
CN108733496B (zh) | 事件处理方法和装置 | |
WO2018112855A1 (zh) | 一种虚拟化方法、装置、及电子设备、计算机程序产品 | |
US7590990B2 (en) | Computer system | |
CN102323917B (zh) | 一种基于共享内存实现多进程共享gpu的方法 | |
JPH07282272A (ja) | 描画処理システム | |
EP3137988B1 (en) | Techniques for serialized execution in a simd processing system | |
US8392921B2 (en) | Apparatus and method of coordinating operation action of robot software component | |
KR101869939B1 (ko) | 멀티-쓰레딩을 사용하는 그래픽 처리를 위한 방법 및 장치 | |
CN107038482A (zh) | 应用于ai算法工程化、系统化的分布式框架 | |
US20200211149A1 (en) | Method and apparatus for hardware accelerated graphics rendering in bridge apis | |
US9021239B2 (en) | Implementation of multi-tasking on a digital signal processor with a hardware stack | |
CN115686758B (zh) | 一种基于帧统计的VirtIO-GPU性能可控方法 | |
CN106484498A (zh) | 基于Node的事件处理方法及相关服务端设备 | |
US10303523B2 (en) | Method and apparatus to migrate stacks for thread execution | |
CN109325345B (zh) | 用于在沙盒环境中运行第三方代码的方法和装置 | |
CN115480904B (zh) | 微内核中系统服务并发调用方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20170308 |