CN109002286A - 基于同步编程的数据异步处理方法及装置 - Google Patents

基于同步编程的数据异步处理方法及装置 Download PDF

Info

Publication number
CN109002286A
CN109002286A CN201810718831.0A CN201810718831A CN109002286A CN 109002286 A CN109002286 A CN 109002286A CN 201810718831 A CN201810718831 A CN 201810718831A CN 109002286 A CN109002286 A CN 109002286A
Authority
CN
China
Prior art keywords
task
thread
calling
synchronizing
access
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
Application number
CN201810718831.0A
Other languages
English (en)
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.)
Shanghai Bilibili Technology Co Ltd
Original Assignee
Shanghai Bilibili Technology 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 Shanghai Bilibili Technology Co Ltd filed Critical Shanghai Bilibili Technology Co Ltd
Priority to CN201810718831.0A priority Critical patent/CN109002286A/zh
Publication of CN109002286A publication Critical patent/CN109002286A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • 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/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Telephonic Communication Services (AREA)

Abstract

本发明提供一种基于同步编程的数据异步处理方法及装置,通过预先创建用于调用开源服务器同步API的同步线程,在业务线程确定需要访问开源服务器的访问任务时,可以构建调用任务发送给同步线程,并将处理逻辑由当前的访问任务切换为下一个处理任务,由同步线程根据调用任务调用开源服务器的同步API,在获取到数据结果时将数据结果通知给业务线程,此时业务线程在将处理逻辑由当前的处理任务恢复到访问任务。本发明中,通过对开源服务器的同步API进行封装,业务线程可以通过同步编写代码获得异步执行的能力,极大地提升了代码编码速度和服务吞吐能力。

Description

基于同步编程的数据异步处理方法及装置
技术领域
本发明涉及计算机技术领域,尤其涉及一种基于同步编程的数据异步处理方法及装置。
背景技术
目前,几乎所有的互联网应用的服务器都离不开开源服务,开源服务器一般会提供应用程序编程接口(Application Programming Interface,API)以供其他服务调用。提供的API包括同步API和异步API,业务进程在访问开源服务器时,可以直接调用同步API或异步API来实现数据获取。
其中,同步API为同步调用方式,这种调用方式可能会出现整体卡顿的情况,造成任务阻塞。异步API为异步调用方式,这种调用方式通过采用多线程技术,可以将多个任务分别交给不同的线程完成,在任务完成后通过回调(callback)等方式通知。然而,异步调用方式需要调用方的代码编程分散在多个函数中,实现较为复杂,代码编码速度慢,且服务吞吐能力低。
发明内容
本发明的目的是提供一种基于同步编程的数据异步处理方法及装置,用于解决现有技术存在的问题。
为实现上述目的,本发明提供一种基于同步编程的数据异步处理方法,包括以下步骤:
预先创建用于调用开源服务器同步API的同步线程;
业务线程在确定需要访问开源服务器的访问任务时,根据所述访问任务构建调用任务;
所述业务线程将所述调用任务发送给所述同步线程,并将处理逻辑由当前的所述访问任务切换为下一个处理任务;
所述同步线程根据所述调用任务调用所述开源服务器的同步API,并在获取到数据结果时将所述数据结果通知给所述业务线程;
所述业务线程在接收到所述同步线程发送的通知时,将处理逻辑由当前的处理任务恢复到所述访问任务。
优选地,
所述调用任务至少包括:访问地址和当前CPU指令寄存器的第一状态值;
所述将处理逻辑由当前的所述访问任务切换为下一个处理任务,包括:将CPU指令寄存器的值修改为下一个处理任务对应的第二状态值;
所述将处理逻辑由当前的处理任务恢复到所述访问任务,包括:根据所述同步线程发送的通知中携带的CPU指令寄存器的第一状态值,将CPU指令寄存器的值修改为所述第一状态值。
优选地,进一步包括:在所述同步线程确定从接收所述调用任务开始计时到目前的时间段超出预先设定的等待时间段、且未获取到数据结果时,则向所述业务线程发送超时信息。
优选地,
创建的用于调用开源服务器的同步API的同步线程为至少一个;
所述业务线程将所述调用任务发送给的所述同步线程为随机选择的处于空闲状态的同步线程。
为实现上述目的,本发明还提供一种基于同步编程的数据异步处理装置,包括:业务线程和用于调用开源服务器同步API的同步线程;
所述业务线程,包括:
确定模块,用于确定需要访问开源服务器的访问任务;
构建模块,用于根据所述访问任务构建调用任务;
第一发送模块,用于将所述调用任务发送给所述同步线程;
第一切换模块,用于在所述第一发送模块执行结束后,将处理逻辑由当前的所述访问任务切换为下一个处理任务;
第一接收模块,用于接收所述同步线程发送的通知;
所述第二切换模块,用于在所述第一接收模块执行结束后,将处理逻辑由当前的处理任务恢复到所述访问任务;
所述同步线程,包括:
第二接收模块,用于接收所述业务线程发送的所述调用任务;
调用模块,用于根据所述调用任务调用所述开源服务器的同步API;
获取模块,用于获取所述开源服务器的同步API反馈的数据结果;
第二发送模块,用于将所述数据结果通知给所述业务线程。
优选地,
所述调用任务至少包括:访问地址和当前CPU指令寄存器的第一状态值;
所述第一切换模块,具体用于将CPU指令寄存器的值修改为下一个处理任务对应的第二状态值;
所述第二切换模块,具体用于根据所述同步线程发送的通知中携带的CPU指令寄存器的第一状态值,将CPU指令寄存器的值修改为所述第一状态值。
优选地,所述第二发送模块,进一步用于在确定从接收所述调用任务开始计时到目前的时间段超出预先设定的等待时间段、且未获取到数据结果时,则向所述业务线程发送超时信息。
优选地,
创建的用于调用开源服务器的同步API的同步线程为至少一个;
所述业务线程将所述调用任务发送给的所述同步线程为随机选择的处于空闲状态的同步线程。
为实现上述目的,本发明还提供一种计算机设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述方法的步骤。
为实现上述目的,本发明还提供一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现上述方法的步骤。
本发明提供的基于同步编程的数据异步处理方法及装置,通过预先创建用于调用开源服务器同步API的同步线程,在业务线程确定需要访问开源服务器的访问任务时,可以构建调用任务发送给同步线程,并将处理逻辑由当前的访问任务切换为下一个处理任务,由同步线程根据调用任务调用开源服务器的同步API,在获取到数据结果时将数据结果通知给业务线程,此时业务线程在将处理逻辑由当前的处理任务恢复到访问任务。本发明中,通过对开源服务器的同步API进行封装,业务线程可以通过同步编写代码获得异步执行的能力,极大地提升了代码编码速度和服务吞吐能力。
附图说明
图1为本发明基于同步编程的数据异步处理方法实施例一的流程图;
图2为本发明基于同步编程的数据异步处理装置实施例一的程序模块示意图;
图3为本发明基于同步编程的数据异步处理装置实施例一的硬件结构示意图;
图4为本发明基于同步编程的数据异步处理方法实施例二的流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明提供的基于同步编程的数据异步处理方法及装置,适用于计算机技术领域,为一种通过同步编写代码实现异步数据处理的方法。本发明通过预先创建用于调用开源服务器同步API的同步线程,在业务线程确定需要访问开源服务器的访问任务时,可以构建调用任务发送给同步线程,并将处理逻辑由当前的访问任务切换为下一个处理任务,由同步线程根据调用任务调用开源服务器的同步API,在获取到数据结果时将数据结果通知给业务线程,此时业务线程在将处理逻辑由当前的处理任务恢复到访问任务。本发明中,通过对开源服务器的同步API进行封装,业务线程可以通过同步编写代码获得异步执行的能力,极大地提升了代码编码速度和服务吞吐能力。
实施例一
请参阅图1,本实施例的一种基于同步编程的数据异步处理方法中,包括以下步骤:
步骤01,预先创建用于调用开源服务器同步API的同步线程。
常见的开源服务器为mysql、redis、kafka等。其中,开源服务器以提供API接口的形式供其他服务调用,该API可以包括同步API和异步API。
在其他服务调用该同步API时,实现的是对开源服务器内数据的同步调用,其中,同步调用就是在发出一个功能调用时,在没有得到返回结果之前,该调用就不返回。也就是必须一件一件事做,等前一件事做完才能做下一件事。单线程中函数一般都是同步调用。
在其他服务调用该异步API时,实现的是对开源服务器内数据的异步调用,其中,异步调用是一种可以无需等待被调用函数的返回值就让当前操作继续执行的方法。
为提高代码编写速度以及降低代码编写的复杂性,创建用于调用开源服务器同步API的同步线程。线程是指在一个程序中能够独立运行的程序片段。在本实施例中,创建的该用于调用开源服务器同步API的同步线程可以为至少一个。
步骤02,业务线程在确定需要访问开源服务器的访问任务时,根据所述访问任务构建调用任务。
其中,业务线程可以是在接收到业务请求或者数据准备通知时,确定需要访问开源服务器的访问任务。
现有技术中是由业务线程直接调用开源服务器的同步API,而在调用同步API时需要等待返回值才能继续下一个任务,因此,在本发明实施例中,可以构建出发送给同步线程的调用任务,其中,该调用任务中携带有所需调用内容的访问地址。
由于在同步线程调用同步API获取到访问结果之后,需要反馈给业务线程,而业务线程也需要对该访问结果进行处理,因此,调用任务中进一步包括:当前CPU指令寄存器的第一状态值。其中,该当前CPU指令寄存器的第一状态值用于表征当前时间节点对应的状态信息。
该当前CPU指令寄存器的第一状态值是在后续反馈访问结果时使用的,用于恢复对该访问任务的处理。
步骤03,所述业务线程将所述调用任务发送给所述同步线程,并将处理逻辑由当前的所述访问任务切换为下一个处理任务。
在创建的用于调用开源服务器的同步API的同步线程只有一个时,可以直接将调用任务发送给该同步线程。
在创建的用于调用开源服务器的同步API的同步线程包括两个以上时,可以通过空闲、忙碌的状态设置来优先选择空闲的同步线程。
例如,同步线程在接收业务线程发送的调用任务之前,同步线程的状态为空闲状态,在接收到业务线程发送的调用任务之后,将自身状态由空闲状态修改为忙碌状态,并执行后续的调用过程。其中,空闲状态、忙碌状态的设置可以通过0、1的方式来实现标志。例如,0用于表征该同步线程为空闲状态,1用于表征该同步线程为忙碌状态。在业务线程发送调用任务,根据各个同步线程的标志确定其空闲状态。在处于空闲状态的同步线程个数不小于两个时,业务线程在两个以上的处于空闲状态的同步线程中随机选择一个同步线程,将调用任务发送该随机选择的同步线程。在所有同步线程均处于忙碌状态时,则随机选择一个处于忙碌状态的同步线程将调用任务发送给该随机选择的同步线程。
业务线程在将调用任务发送给同步线程之后,无需等待同步线程的返回结果就可以继续执行后续代码。在执行后续代码时,即将当前的访问任务切换为下一个处理任务。
在本实施例中,当将当前的访问任务切换为下一个处理任务时,可以采用协程切换或上下文切换的方式来实现,具体地,需要将CPU指令寄存器的值修改为下一个处理任务对应的第二状态值,从而执行下一个处理任务。
在本发明一个实施例中,当需要执行的处理任务较多时,可以预先设置一个任务库,将所需执行的处理任务放置在该任务库中,并按照一定的方式为任务库中的各个处理任务设置优先级,优先级较高的处理任务可以优先被处理,如此,在做协程切换或上下文切换时,可以按照优先级的设置从高到低进行切换。
步骤04,所述同步线程根据所述调用任务调用所述开源服务器的同步API,并在获取到数据结果时将所述数据结果通知给所述业务线程。
同步线程在调用开源服务器的同步API时,同步获取开源服务器内的相应数据,在获取到数据结果后将该数据结果反馈给业务线程。为了实现业务线程的任务恢复,同步线程在反馈数据结果时,同时将第一状态值反馈给业务线程。
进一步地,在同步线程将数据结果通知给业务线程之后,可以将自身的状态由忙碌状态修改为空闲状态,以等待业务线程为其分配调用任务。
步骤05,所述业务线程在接收到所述同步线程发送的通知时,将处理逻辑由当前的处理任务恢复到所述访问任务。
在本实施例中,当业务线程接收到同步线程发送的通知时,根据通知中携带的第一状态值将CPU指令寄存器的值修改为该第一状态值,从而实现协程或上下文的恢复。
进一步地,在恢复了协程或上下文之后,业务线程根据通知中携带的数据结果实现对业务请求或数据准备通知的反馈,如此在实访问开源服务器时是同步访问,而实际情况下业务线程是在异步处理数据,从而实现了同步编程代码的数据异步处理效果。
在本发明一个实施例中,由于同步访问开源服务器可能会出现拥堵等情况,因此可能会获取不到访问数据,在此情况下,同步线程可以告知业务线程该超时信息,具体地,在所述同步线程确定从接收所述调用任务开始计时到目前的时间段超出预先设定的等待时间段、且未获取到数据结果时,则向所述业务线程发送超时信息。
以一个常用的读取数据的业务场景为例,业务线程需要先访问redis服务器,如果数据不存在再访问mysql服务器。若redis服务器中数据的命中率为10%,那么将有90%的业务请求需要访问mysql服务器,若redis服务器拥堵变慢,那么另外90%的业务请求将不能获取处理,根据本发明上述实施例,另外的90%的业务请求可以获得正常处理,若需要访问redis服务器的10%因为拥堵变慢无法在设定的等待时间段内获取到,则会反馈回超时信息,只有该10%的数据无法正确处理,因此,本发明不仅极大的提高了代码编写速度,还提升了服务器的吞吐能力。
请继续参阅图2,示出了一种基于同步编程的数据异步处理装置,在本实施例中,基于同步编程的数据异步处理装置10可以包括或被分割成一个或多个程序模块,一个或者多个程序模块被存储于存储介质中,并由一个或多个处理器所执行,以完成本发明,并可实现上述基于同步编程的数据异步处理方法。本发明所称的程序模块是指能够完成特定功能的一系列计算机程序指令段,比程序本身更适合于描述基于同步编程的数据异步处理装置10在存储介质中的执行过程。以下描述将具体介绍本实施例各程序模块的功能:
业务线程11和用于调用开源服务器同步API的同步线程12;
所述业务线程11,包括:
确定模块111,用于确定需要访问开源服务器的访问任务;
构建模块112,用于根据所述访问任务构建调用任务;
第一发送模块113,用于将所述调用任务发送给所述同步线程;
第一切换模块114,用于在所述第一发送模块执行结束后,将处理逻辑由当前的所述访问任务切换为下一个处理任务;
第一接收模块115,用于接收所述同步线程发送的通知;
第二切换模块116,用于在所述第一接收模块执行结束后,将处理逻辑由当前的处理任务恢复到所述访问任务;
所述同步线程12,包括:
第二接收模块121,用于接收所述业务线程发送的所述调用任务;
调用模块122,用于根据所述调用任务调用所述开源服务器的同步API;
获取模块123,用于获取所述开源服务器的同步API反馈的数据结果;
第二发送模块124,用于将所述数据结果通知给所述业务线程。
在本发明一个实施例中,所述调用任务至少包括:访问地址和当前CPU指令寄存器的第一状态值;
所述第一切换模块114,具体用于将CPU指令寄存器的值修改为下一个处理任务对应的第二状态值;
所述第二切换模块116,具体用于根据所述同步线程发送的通知中携带的CPU指令寄存器的第一状态值,将CPU指令寄存器的值修改为所述第一状态值。
在本发明一个实施例中,所述第二发送模块124,进一步用于在确定从接收所述调用任务开始计时到目前的时间段超出预先设定的等待时间段、且未获取到数据结果时,则向所述业务线程发送超时信息。
在本发明一个实施例中,创建的用于调用开源服务器的同步API的同步线程12为至少一个;
所述业务线程11将所述调用任务发送给的所述同步线程12为随机选择的处于空闲状态的同步线程12。
本实施例还提供一种计算机设备,如可以执行程序的智能手机、平板电脑、笔记本电脑、台式计算机、机架式服务器、刀片式服务器、塔式服务器或机柜式服务器(包括独立的服务器,或者多个服务器所组成的服务器集群)等。本实施例的计算机设备20至少包括但不限于:可通过系统总线相互通信连接的存储器21、处理器22,如图3所示。需要指出的是,图3仅示出了具有组件21-22的计算机设备20,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。
本实施例中,存储器21(即可读存储介质)包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,存储器21可以是计算机设备20的内部存储单元,例如该计算机设备20的硬盘或内存。在另一些实施例中,存储器21也可以是计算机设备20的外部存储设备,例如该计算机设备20上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。当然,存储器21还可以既包括计算机设备20的内部存储单元也包括其外部存储设备。本实施例中,存储器21通常用于存储安装于计算机设备20的操作系统和各类应用软件,例如实施例一的基于同步编程的数据异步处理装置10的程序代码等。此外,存储器21还可以用于暂时地存储已经输出或者将要输出的各类数据。
处理器22在一些实施例中可以是中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器22通常用于控制计算机设备20的总体操作。本实施例中,处理器22用于运行存储器21中存储的程序代码或者处理数据,例如运行基于同步编程的数据异步处理装置10,以实现实施例一的基于同步编程的数据异步处理方法。
具体地,处理器22用于运行存储器21中存储的程序代码或者处理数据执行:
预先创建用于调用开源服务器同步API的同步线程;
业务线程在确定需要访问开源服务器的访问任务时,根据所述访问任务构建调用任务;
所述业务线程将所述调用任务发送给所述同步线程,并将处理逻辑由当前的所述访问任务切换为下一个处理任务;
所述同步线程根据所述调用任务调用所述开源服务器的同步API,并在获取到数据结果时将所述数据结果通知给所述业务线程;
所述业务线程在接收到所述同步线程发送的通知时,将处理逻辑由当前的处理任务恢复到所述访问任务。
可选地,处理器22用于运行存储器21中存储的程序代码或者处理数据具体执行:
在所述调用任务至少包括:访问地址和当前CPU指令寄存器的第一状态值时,将CPU指令寄存器的值修改为下一个处理任务对应的第二状态值;根据所述同步线程发送的通知中携带的CPU指令寄存器的第一状态值,将CPU指令寄存器的值修改为所述第一状态值。
可选地,处理器22用于运行存储器21中存储的程序代码或者处理数据进一步执行:在所述同步线程确定从接收所述调用任务开始计时到目前的时间段超出预先设定的等待时间段、且未获取到数据结果时,则向所述业务线程发送超时信息。
可选地,处理器22用于运行存储器21中存储的程序代码或者处理数据具体执行:在创建的用于调用开源服务器的同步API的同步线程为至少一个时,所述业务线程将所述调用任务发送给的所述同步线程为随机选择的处于空闲状态的同步线程。
本实施例还提供一种计算机可读存储介质,如闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘、服务器、App应用商城等等,其上存储有计算机程序,程序被处理器执行时实现相应功能。本实施例的计算机可读存储介质用于存储基于同步编程的数据异步处理装置10,被处理器执行时实现实施例一的基于同步编程的数据异步处理方法。
实施例二
请参阅图4,本实施例的基于同步编程的数据异步处理方法以实施例一为基础,包括以下步骤:
步骤01,创建用于调用开源服务器同步API的同步线程N个。
创建的同步线程分别为:同步线程1、同步线程2、同步线程3、……、同步线程N。其中,N为不小于1的整数。
在本实施例中,在新创建的同步线程上设置有空闲状态的标志。
步骤02,在业务线程接收到业务请求或者数据准备通知时,确定需要访问开源服务器的访问任务,并根据该访问任务构建相应的调用任务。
其中,构建的调用任务中包括所需调用内容的访问地址以及当前CPU指令寄存器的第一状态值。
步骤03,业务线程确定当前是否有处于空闲状态的同步线程,若有,则将调用任务随机发送给一个处于空闲状态的同步线程;若无,则将调用任务随机发送给一个处于忙碌状态的同步线程。
其中,若处于空闲状态的同步线程只有一个,那么可以直接将该调用任务发送给该同步线程。
步骤04,业务线程在将调用任务发出后,根据所需处理的处理任务的优先级,获取优先级最高的处理任务对应的CPU指令寄存器的第二状态值,将当前CPU指令寄存器的第一状态值修改为第二状态值,以将处理逻辑由当前的该访问任务切换为下一个处理任务。
步骤05,接收到调用任务的同步线程将自身状态标志为忙碌状态。
需要说明的是,若同步线程在接收到该调用任务之前自身状态为空闲状态,那么在接收到调用任务之后,将自身状态由空闲状态修改为忙碌状态;若同步线程在接收到该调用任务之前自身状态为忙碌状态,那么在接收到调用任务之后,可以无需修改,只需确定其自身状态的标志位忙碌状态即可。
步骤06,接收到调用任务的同步线程调用开源服务器的同步API,若在设定的等待时间段内获取到的数据结果,则将获取到的数据结果和调用任务中包括的CPU指令寄存器的第一状态值发送给业务线程。
其中,该调用任务可以是只针对一个开源服务器的同步API进行调用,例如,只针对开源服务器redis的同步API进行调用;也可以是针对两个及两个以上的开源服务器的同步API进行调用,例如,先针对开源服务器redis的同步API进行调用,然后在针对开源服务器mysql的同步API进行调用。
需要说明的是,若同步线程在设定的等待时间段内未获取到数据结果,则向业务线程发送超时信息,以告知业务线程该调用任务超时。
步骤07,业务线程在处理其他处理任务过程中,当接收到同步线程发送的通知后,根据通知内携带的第一状态值,将当前处理任务对应的CPU指令寄存器的值修改为第一状态值。
步骤08,业务线程根据通知中的数据结果对业务请求或数据准备通知进行响应。
本实施例中,过预先创建用于调用开源服务器同步API的同步线程,在业务线程确定需要访问开源服务器的访问任务时,可以构建调用任务发送给同步线程,并将处理逻辑由当前的访问任务切换为下一个处理任务,由同步线程根据调用任务调用开源服务器的同步API,在获取到数据结果时将数据结果通知给业务线程,此时业务线程在将处理逻辑由当前的处理任务恢复到访问任务。本发明中,通过对开源服务器的同步API进行封装,业务线程可以通过同步编写代码获得异步执行的能力,极大地提升了代码编码速度和服务吞吐能力。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

Claims (10)

1.一种基于同步编程的数据异步处理方法,其特征在于,预先创建用于调用开源服务器同步API的同步线程,所述方法包括以下步骤:
业务线程在确定需要访问开源服务器的访问任务时,根据所述访问任务构建调用任务;
所述业务线程将所述调用任务发送给所述同步线程,并将处理逻辑由当前的所述访问任务切换为下一个处理任务;
所述同步线程根据所述调用任务调用所述开源服务器的同步API,并在获取到数据结果时将所述数据结果通知给所述业务线程;
所述业务线程在接收到所述同步线程发送的通知时,将处理逻辑由当前的处理任务恢复到所述访问任务。
2.根据权利要求1所述基于同步编程的数据异步处理方法,其特征在于,
所述调用任务至少包括:访问地址和当前CPU指令寄存器的第一状态值;
所述将处理逻辑由当前的所述访问任务切换为下一个处理任务,包括:将CPU指令寄存器的值修改为下一个处理任务对应的第二状态值;
所述将处理逻辑由当前的处理任务恢复到所述访问任务,包括:根据所述同步线程发送的通知中携带的CPU指令寄存器的第一状态值,将CPU指令寄存器的值修改为所述第一状态值。
3.根据权利要求1所述基于同步编程的数据异步处理方法,其特征在于,进一步包括:在所述同步线程确定从接收所述调用任务开始计时到目前的时间段超出预先设定的等待时间段、且未获取到数据结果时,则向所述业务线程发送超时信息。
4.根据权利要求1-3中任一所述基于同步编程的数据异步处理方法,其特征在于,
创建的用于调用开源服务器的同步API的同步线程为至少一个;
所述业务线程将所述调用任务发送给的所述同步线程为随机选择的处于空闲状态的同步线程。
5.一种基于同步编程的数据异步处理装置,其特征在于,包括:业务线程和用于调用开源服务器同步API的同步线程;
所述业务线程,包括:
确定模块,用于确定需要访问开源服务器的访问任务;
构建模块,用于根据所述访问任务构建调用任务;
第一发送模块,用于将所述调用任务发送给所述同步线程;
第一切换模块,用于在所述第一发送模块执行结束后,将处理逻辑由当前的所述访问任务切换为下一个处理任务;
第一接收模块,用于接收所述同步线程发送的通知;
第二切换模块,用于在所述第一接收模块执行结束后,将处理逻辑由当前的处理任务恢复到所述访问任务;
所述同步线程,包括:
第二接收模块,用于接收所述业务线程发送的所述调用任务;
调用模块,用于根据所述调用任务调用所述开源服务器的同步API;
获取模块,用于获取所述开源服务器的同步API反馈的数据结果;
第二发送模块,用于将所述数据结果通知给所述业务线程。
6.根据权利要求5所述基于同步编程的数据异步处理装置,其特征在于,
所述调用任务至少包括:访问地址和当前CPU指令寄存器的第一状态值;
所述第一切换模块,具体用于将CPU指令寄存器的值修改为下一个处理任务对应的第二状态值;
所述第二切换模块,具体用于根据所述同步线程发送的通知中携带的CPU指令寄存器的第一状态值,将CPU指令寄存器的值修改为所述第一状态值。
7.根据权利要求5所述基于同步编程的数据异步处理装置,其特征在于,所述第二发送模块,进一步用于在确定从接收所述调用任务开始计时到目前的时间段超出预先设定的等待时间段、且未获取到数据结果时,则向所述业务线程发送超时信息。
8.根据权利要求5-7中任一所述基于同步编程的数据异步处理装置,其特征在于,
创建的用于调用开源服务器的同步API的同步线程为至少一个;
所述业务线程将所述调用任务发送给的所述同步线程为随机选择的处于空闲状态的同步线程。
9.一种计算机设备,其特征在于,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现权利要求1至4任一项所述方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至4任一项所述方法的步骤。
CN201810718831.0A 2018-06-29 2018-06-29 基于同步编程的数据异步处理方法及装置 Pending CN109002286A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810718831.0A CN109002286A (zh) 2018-06-29 2018-06-29 基于同步编程的数据异步处理方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810718831.0A CN109002286A (zh) 2018-06-29 2018-06-29 基于同步编程的数据异步处理方法及装置

Publications (1)

Publication Number Publication Date
CN109002286A true CN109002286A (zh) 2018-12-14

Family

ID=64598976

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810718831.0A Pending CN109002286A (zh) 2018-06-29 2018-06-29 基于同步编程的数据异步处理方法及装置

Country Status (1)

Country Link
CN (1) CN109002286A (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111506368A (zh) * 2020-04-21 2020-08-07 北京同邦卓益科技有限公司 对异步调用转同步调用的方法、装置、设备及存储介质
CN112559535A (zh) * 2020-12-28 2021-03-26 平安银行股份有限公司 基于多线程的异步任务处理方法、装置、设备及介质
CN113326039A (zh) * 2021-06-21 2021-08-31 深圳市网通兴技术发展有限公司 医疗代码流程建模的异步代码生成方法及系统

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140282565A1 (en) * 2013-03-15 2014-09-18 Aamer Jaleel Processor Scheduling With Thread Performance Estimation On Core Of Different Type
CN104699541A (zh) * 2015-03-30 2015-06-10 北京奇虎科技有限公司 同步数据的方法、装置、数据传输组件及系统
CN105159774A (zh) * 2015-07-08 2015-12-16 清华大学 一种api请求保序处理方法及系统
CN105657571A (zh) * 2015-12-25 2016-06-08 中山大学花都产业科技研究院 一种局域网内视频传输节省带宽的方法
CN107015850A (zh) * 2016-01-28 2017-08-04 博雅网络游戏开发(深圳)有限公司 线程调度方法和装置
CN107515795A (zh) * 2017-09-08 2017-12-26 北京京东尚科信息技术有限公司 基于队列的多任务并行数据处理方法、装置、介质和设备

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140282565A1 (en) * 2013-03-15 2014-09-18 Aamer Jaleel Processor Scheduling With Thread Performance Estimation On Core Of Different Type
CN104699541A (zh) * 2015-03-30 2015-06-10 北京奇虎科技有限公司 同步数据的方法、装置、数据传输组件及系统
CN105159774A (zh) * 2015-07-08 2015-12-16 清华大学 一种api请求保序处理方法及系统
CN105657571A (zh) * 2015-12-25 2016-06-08 中山大学花都产业科技研究院 一种局域网内视频传输节省带宽的方法
CN107015850A (zh) * 2016-01-28 2017-08-04 博雅网络游戏开发(深圳)有限公司 线程调度方法和装置
CN107515795A (zh) * 2017-09-08 2017-12-26 北京京东尚科信息技术有限公司 基于队列的多任务并行数据处理方法、装置、介质和设备

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111506368A (zh) * 2020-04-21 2020-08-07 北京同邦卓益科技有限公司 对异步调用转同步调用的方法、装置、设备及存储介质
CN111506368B (zh) * 2020-04-21 2023-09-22 北京同邦卓益科技有限公司 对异步调用转同步调用的方法、装置、设备及存储介质
CN112559535A (zh) * 2020-12-28 2021-03-26 平安银行股份有限公司 基于多线程的异步任务处理方法、装置、设备及介质
CN112559535B (zh) * 2020-12-28 2023-08-22 平安银行股份有限公司 基于多线程的异步任务处理方法、装置、设备及介质
CN113326039A (zh) * 2021-06-21 2021-08-31 深圳市网通兴技术发展有限公司 医疗代码流程建模的异步代码生成方法及系统
CN113326039B (zh) * 2021-06-21 2022-02-18 深圳市网通兴技术发展有限公司 医疗代码流程建模的异步代码生成方法及系统

Similar Documents

Publication Publication Date Title
US8381230B2 (en) Message passing with queues and channels
US8904386B2 (en) Running a plurality of instances of an application
EP3230860B1 (en) Technologies for efficient synchronization barriers with work stealing support
CN102567090B (zh) 在计算机处理器中创建执行线程的方法和系统
CN106528893B (zh) 数据同步方法及装置
CN109002286A (zh) 基于同步编程的数据异步处理方法及装置
CN104092763B (zh) 一种应用程序安装包推送方法及装置
CN107491346A (zh) 一种应用的任务处理方法、装置及系统
CN107479981B (zh) 一种基于异步调用实现同步调用的处理方法及装置
CN114168271B (zh) 一种任务调度方法、电子设备及存储介质
US20130176323A1 (en) Method and apparatus for graphic processing using multi-threading
CN108900627B (zh) 一种网络请求方法、终端装置及存储介质
US8543722B2 (en) Message passing with queues and channels
US9507637B1 (en) Computer platform where tasks can optionally share per task resources
US7991962B2 (en) System and method of using threads and thread-local storage
CN114490123A (zh) 一种任务处理方法、装置及电子设备和存储介质
CN110908644B (zh) 状态节点的配置方法、装置、计算机设备和存储介质
CN115794317B (zh) 一种基于虚拟机的处理方法、装置、设备及介质
CN115981893A (zh) 消息队列任务处理方法、装置、服务器及存储介质
CN108984105B (zh) 对网络存储设备中的复制任务进行分配的方法和设备
CN113821174B (zh) 存储处理方法、装置、网卡设备及存储介质
CN109040491A (zh) 挂机行为处理方法、装置、计算机设备及存储介质
JP5678347B2 (ja) Itシステムの構成方法、そのコンピュータプログラムおよびitシステム
CN111708631B (zh) 基于多路服务器的数据处理方法、智能终端及存储介质
CN114327259A (zh) 一种闪存通道控制器运行方法、装置、设备及存储介质

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
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 40000243

Country of ref document: HK