异步环境中模拟同步阻塞的方法及装置、存储介质、服务器、终端与流程

文档序号:16467423发布日期:2019-01-02 22:51阅读:143来源:国知局
异步环境中模拟同步阻塞的方法及装置、存储介质、服务器、终端与流程

本发明涉及计算机技术领域,尤其是一种异步环境中模拟同步阻塞的方法及装置、存储介质、服务器、终端。



背景技术:

当利用编译技术将用于客户端的原生游戏移植至终端网页游戏时,存在一个重要问题是终端执行环境中不存在同步阻塞指令,也即不能实现同步阻塞过程。

其中,所述终端可以包括浏览器、网络视图(webview)组件以及其他运行javascript或者webassembly等采用异步调用函数的代码逻辑的终端设备。

具体地,原生游戏采用同步调用函数的代码逻辑,由于数据加载、网络通讯等原因,存在同步阻塞的情况,例如挂起(suspend)操作、睡眠(sleep)操作或者等待(wait)操作时都会进入阻塞状态。其中,阻塞用于指示暂停线程的运行,维持执行现场状态不变,直到完成任务后,恢复执行现场的过程。

而在终端执行环境中,采用异步调用函数的代码逻辑,当遇到阻塞时,无法维持执行现场状态不变,而是采用清理执行现场,完成任务后通过状态、通知和回调来唤醒终端的执行程序的过程,终端将形成新的执行现场,而并非恢复执行现场。因此,在终端执行环境中无法实现与原生游戏相同的代码逻辑。

在现有技术中,通过人为预判原生游戏中的阻塞点位置,进而在相邻阻塞点之间配置片段程序,并且在阻塞点位置之后的后一片段程序中,为执行现场的参数人为赋予阻塞点之前的前一片段程序的参数值,从而实现对原生游戏中同步阻塞过程的模拟。

但是,现有的方法依赖人工对阻塞点位置的预判,往往不够准确,如果判断数目过多将导致人工进行代码重构的成本过高,效率低下;如果判断数目过少将导致阻塞发生时执行现场在阻塞点位置前后不一致,甚至导致程序运行中断。

进一步地,对于判断正确的阻塞点位置,现有技术中需要人工进行代码重构,即在阻塞点位置之后的后一片段程序中,为执行现场的参数人为赋予阻塞点之前的前一片段程序的参数值,导致人工成本过高。



技术实现要素:

本发明解决的技术问题是提供一种异步环境中模拟同步阻塞的方法及装置、存储介质、服务器、终端,可以准确地确定是否发生阻塞以及提高程序运行效率。

为解决上述技术问题,本发明实施例提供一种异步环境中模拟同步阻塞的方法,包括以下步骤:从服务器接收转换后程序,所述转换后程序是将在同步环境下运行的原始程序转换得到的在异步环境下运行的程序,所述转换后程序中安插有阻塞检测代码;在执行所述转换后程序时,执行所述阻塞检测代码以检测是否发生阻塞;当检测到发生阻塞时,向服务器发送阻塞点位置,并保存执行现场;执行所述阻塞对应的操作后,恢复所述执行现场并继续执行所述阻塞点位置之后的程序。

可选的,所述保存执行现场包括:执行现场保存代码以保存所述原始程序的执行现场,所述现场保存代码来自于所述服务器。

可选的,所述现场保存代码安插于所述转换后程序中。

可选的,恢复所述执行现场并继续执行所述阻塞点位置之后的程序包括:从所述服务器接收片段程序,所述片段程序为所述转换后程序在所述阻塞点位置之后的剩余部分;执行现场恢复代码以恢复所述原始程序的执行现场,所述现场恢复代码来自于所述服务器;执行所述片段程序。

可选的,所述现场恢复代码安插于所述片段程序中。

可选的,所述片段程序是由编译器创建的。

为解决上述技术问题,本发明实施例提供一种异步环境中模拟同步阻塞的方法,包括以下步骤:将在同步环境下运行的原始程序进行转换得到在异步环境下运行的转换后程序,并且在所述转换后程序中安插阻塞检测代码;向终端发送所述转换后程序,以使所述终端执行所述转换后程序,并且执行所述阻塞检测代码以检测是否发生阻塞;从所述终端接收阻塞点位置,所述阻塞点位置是在所述终端检测到发生阻塞时发出的;向所述终端发送片段程序,以使所述终端在执行所述阻塞对应的操作后,继续执行所述阻塞点位置之后的程序。

可选的,所述的异步环境中模拟同步阻塞的方法还包括:向所述终端发送现场保存代码,以使所述终端保存所述原始程序的执行现场;向所述终端发送现场恢复代码,以使所述终端在执行所述阻塞对应的操作后,恢复所述执行现场。

可选的,所述现场保存代码和安插于所述转换后程序中。

可选的,所述现场恢复代码安插于所述片段程序中。

可选的,向所述终端发送片段程序包括:基于所述阻塞点位置创建片段程序,所述片段程序为所述转换后程序在所述阻塞点位置之后的剩余部分;向所述终端发送所述片段程序。

可选的,所述片段程序是由编译器创建的。

为解决上述技术问题,本发明实施例提供一种异步环境中模拟同步阻塞的装置,包括:转换后程序接收模块,适于从服务器接收转换后程序,所述转换后程序是将在同步环境下运行的原始程序转换得到的在异步环境下运行的程序,所述转换后程序中安插有阻塞检测代码;阻塞检测模块,适于当执行所述转换后程序时,执行所述阻塞检测代码以检测是否发生阻塞;现场保存模块,适于当检测到发生阻塞时,向服务器发送阻塞点位置,并保存执行现场;现场恢复模块,适于执行所述阻塞对应的操作后,恢复所述执行现场并继续执行所述阻塞点位置之后的程序。

为解决上述技术问题,本发明实施例提供一种异步环境中模拟同步阻塞的装置,包括:程序转换模块,适于将在同步环境下运行的原始程序进行转换得到在异步环境下运行的转换后程序,并且在所述转换后程序中安插阻塞检测代码;转换后程序发送模块,适于向终端发送所述转换后程序,以使所述终端执行所述转换后程序,并且执行所述阻塞检测代码以检测是否发生阻塞;阻塞点位置接收模块,适于从所述终端接收阻塞点位置,所述阻塞点位置是在所述终端检测到发生阻塞时发出的;片段程序发送模块,适于向所述终端发送片段程序,以使所述终端在执行所述阻塞对应的操作后,继续执行所述阻塞点位置之后的程序。

为解决上述技术问题,本发明实施例提供一种计算机可读存储介质,其上存储有计算机指令,所述计算机指令运行时执行上述异步环境中模拟同步阻塞的方法的步骤。

为解决上述技术问题,本发明实施例提供一种计算机可读存储介质,其上存储有计算机指令,所述计算机指令运行时执行上述异步环境中模拟同步阻塞的方法的步骤。

为解决上述技术问题,本发明实施例提供一种终端,包括存储器和处理器,所述存储器上存储有能够在所述处理器上运行的计算机指令,其特征在于,所述处理器运行所述计算机指令时执行上述异步环境中模拟同步阻塞的方法的步骤。

为解决上述技术问题,本发明实施例提供一种服务器,包括存储器和处理器,所述存储器上存储有能够在所述处理器上运行的计算机指令,其特征在于,所述处理器运行所述计算机指令时执行上述异步环境中模拟同步阻塞的方法的步骤。

与现有技术相比,本发明实施例的技术方案具有以下有益效果:

在本发明实施例中,从服务器接收转换后程序,所述转换后程序是将在同步环境下运行的原始程序转换得到的在异步环境下运行的程序,所述转换后程序中安插有阻塞检测代码;在执行所述转换后程序时,执行所述阻塞检测代码以检测是否发生阻塞;当检测到发生阻塞时,向服务器发送阻塞点位置,并保存执行现场;执行所述阻塞对应的操作后,恢复所述执行现场并继续执行所述阻塞点位置之后的程序。采用上述方案,通过在服务器端创建阻塞检测代码,进而在终端执行所述阻塞检测代码以检测是否发生阻塞,相比于现有技术中依赖人工对阻塞点位置进行预判,可以准确地确定是否发生阻塞,从而在提高效率的同时,有效地提高程序运行的鲁棒性。并且通过在服务器端创建现场保存代码和现场恢复代码,进而在终端执行所述现场保存代码和现场恢复代码,以保存并且在阻塞点位置之后恢复所述原始程序的执行现场,相比于现有技术中在阻塞点位置之后的后一片段程序中,通过人工方式为执行现场的参数赋予阻塞点之前的前一片段程序的参数值,可以有效地降低人工成本,提高效率。

进一步,在本发明实施例中,可以在服务器端基于所述阻塞点位置创建片段程序,相比于现有技术中由人工方式完成在相邻阻塞点之间创建片段程序的工作,可以有效地降低人工成本,提高效率。

附图说明

图1是本发明实施例中一种异步环境中模拟同步阻塞的方法的流程图;

图2是图1中步骤s14的一种具体实施方式的流程图;

图3是本发明实施例中一种异步环境中模拟同步阻塞的方法的数据流图;

图4是本发明实施例中另一种异步环境中模拟同步阻塞的方法的流程图;

图5是本发明实施例中又一种异步环境中模拟同步阻塞的方法的部分流程图;

图6是本发明实施例中又一种异步环境中模拟同步阻塞的方法的数据流图;

图7是本发明实施例中一种异步环境中模拟同步阻塞的装置的结构示意图;

图8是图7中现场恢复模块74的一种具体实施方式的结果示意图;

图9是本发明实施例中另一种异步环境中模拟同步阻塞的装置的结构示意图;

图10是图9中片段程序发送模块94的一种具体实施方式的结果示意图。

具体实施方式

在某些场景下,需要在异步环境中模拟实现同步阻塞代码的执行。例如当利用编译技术将用于客户端的原生游戏移植至用于终端的网页游戏时,用户希望将已经开发好的游戏代码自动变成对应的可在网页中运行的代码(例如javascript或者webassembly),需要解决的一个重要问题是如何在终端执行环境中模拟同步阻塞。

具体地,在异步环境中,是通过异步操作从网络、数据库等外部环境加载数据,包括展开(unwind)当前执行堆栈,清理执行现场,以及在异步加载操作结束后,调用回调函数并且创建新的执行现场等步骤。而已经开发好的游戏代码,也即原始程序通常是采用同步操作加载数据的。

更具体而言,在同步模式下,发出一个功能调用后,在没有得到结果之前不返回该调用。以线程a和b为例,当a执行到某个位置时,如果后续代码逻辑依赖于线程b,则需要进行等待直至线程b返回执行结果。例如线程a需要实现在屏幕上显示一幅图片这一功能,而该图片需要通过线程b从文件系统加载,则线程a需要进入阻塞(blocking)状态,以等到线程b将图片读取到内存以后,才能从阻塞状态中恢复以进行显示。其中,阻塞意味着需要暂停线程的运行,维持其执行现场状态不变,直到执行从阻塞状态中恢复的功能。

而在异步模式下,发出一个功能调用后,调用者不会立刻得到结果,实际处理该调用的部件在完成该功能后,通知调用者。其中,通知调用者的方式可以包括状态、通知、回调函数等。

仍然以线程a和b,且通过回调函数通知调用者为例,当线程a需要实现在屏幕上显示一幅图片这一功能,而该图片需要通过线程b从文件系统加载时,则在线程b被启动后,线程a的执行现场不予保存,而是注册回调(callback)函数c。当线程b返回加载结果,回调函数c时,由于原来线程a的执行现场已不存在,函数c有新的执行现场,相当于新的线程c。需要指出的是,线程c无法自动继承线程a的执行现场,需要额外将线程a中必要的上下文信息传递至线程c,例如通过变量赋值等方式实现。

其中,执行现场(context),又称为上下文,用于指示一个线程在某个时刻运行状态的数据集合,可以包括调用堆栈、寄存器状态等信息。

在将同步环境下开发的程序自动变成可在异步环境中运行的程序时,由于异步环境中不存在同步阻塞指令,有可能在同步阻塞的位置发生程序运行中断的问题。

在现有的一种解决方案中,可以在代码启动之前,通过异步操作将所有外部数据加载至内存中,进而从内存中读取数据,相当于将加载外部数据的异步操作变成了一个加载内存数据的同步操作。例如webassembly或者asm.js采用了该方案。

具体而言,在c/c++原生代码中,从文件系统读取文件可视为一个阻塞操作。当在内存中模拟该文件系统时,可以通过将外部读取磁盘文件转换为内部读取内存数据,将阻塞操作变为非阻塞操作。更具体地,由于读取磁盘文件为外部i/o操作,速度较慢,需要cpu进行等待,所以可视为阻塞操作;而读取内存数据为cpu内部操作,速度很快,所以可视为非阻塞操作。

但是,该解决方案存在着对内存的存储空间需求过高的问题。具体地,外部数据通常体积很大,预先载入需要占用内存的大量存储空间。而终端中往往内存空间有限,容易超出上限,严重时可能导致终端崩溃。随着技术进步以及用户体验需求增加,外部资源和数据文件将越来越多,致使该解决方案的问题越来越严重。

在现有的另一种解决方案中,采用javascript中的生成器(generator)函数,通过模拟第二线程,在异步环境下实现暂停执行以及再次启动时从暂停位置状态继续运行的功能。但是,由于该解决方案需要用户设备支持javascript的es6及以上版本,还存在编译器难以优化、效率较低、运行较慢的问题。

在现有的再一种解决方案中,可以通过人为预判原生游戏中的阻塞点位置,进而在相邻阻塞点之间配置片段程序,并且在阻塞点位置之后的后一片段程序中,为执行现场的参数人为赋予阻塞点之前的前一片段程序的参数值,从而实现对原生游戏中同步阻塞过程的模拟。但是,现有的方法依赖人工对阻塞点位置的预判以及人工为执行现场的参数赋值,导致阻塞点位置判断准确度不够以及人工成本过高的问题。

在本发明实施例中,从服务器接收转换后程序,所述转换后程序是将在同步环境下运行的原始程序转换得到的在异步环境下运行的程序,所述转换后程序中安插有阻塞检测代码;在执行所述转换后程序时,执行所述阻塞检测代码以检测是否发生阻塞;当检测到发生阻塞时,向服务器发送阻塞点位置,并保存执行现场;执行所述阻塞对应的操作后,恢复所述执行现场并继续执行所述阻塞点位置之后的程序。采用上述方案,通过在服务器端创建阻塞检测代码,进而在终端执行所述阻塞检测代码以检测是否发生阻塞,相比于现有技术中依赖人工对阻塞点位置进行预判,可以准确地确定是否发生阻塞,从而在提高效率的同时,有效地提高程序运行的鲁棒性。进一步地,通过在服务器端创建现场保存代码和现场恢复代码,进而在终端执行所述现场保存代码和现场恢复代码,以保存并且在阻塞点位置之后恢复所述原始程序的执行现场,相比于现有技术中在阻塞点位置之后的后一片段程序中,通过人工方式为执行现场的参数赋予阻塞点之前的前一片段程序的参数值,可以有效地降低人工成本,提高效率。

为使本发明的上述目的、特征和有益效果能够更为明显易懂,下面结合附图对本发明的具体实施例做详细的说明。

参照图1,图1是本发明实施例中一种异步环境中模拟同步阻塞的方法的流程图。所述方法可以用于终端,可以包括步骤s11至步骤s14:

步骤s11:从服务器接收转换后程序,所述转换后程序是将在同步环境下运行的原始程序转换得到的在异步环境下运行的程序,所述转换后程序中安插有阻塞检测代码;

步骤s12:在执行所述转换后程序时,执行所述阻塞检测代码以检测是否发生阻塞;

步骤s13:当检测到发生阻塞时,向服务器发送阻塞点位置,并保存执行现场;

步骤s14:执行所述阻塞对应的操作后,恢复所述执行现场并继续执行所述阻塞点位置之后的程序。

在步骤s11的具体实施中,服务器将在同步环境下运行的原始程序转换到在异步环境下运行的程序后,将转换后程序发送至终端。

其中,所述转换后程序中安插有阻塞检测代码,所述阻塞检测代码用于检测是否发生阻塞。需要指出的是,所述阻塞检测代码还可以独立发送至终端。采用本发明实施例的方案,有助于节省信令开销,提高发送效率。

具体地,所述原始程序可以为以c/c++代码创建的程序,或者采用其他代码创建的在同步环境下运行的程序;所述转换后程序可以为以javascript代码创建的程序,或者采用其他代码创建的在异步环境下运行的程序。

在步骤s12的具体实施中,在终端执行所述转换后程序时,执行所述阻塞检测代码,以检测是否发生阻塞。其中,所述终端可以持续地执行所述阻塞检测代码,以免遗漏阻塞点位置。

在步骤s13的具体实施中,当终端检测到发生阻塞时,执行向服务器发送阻塞点位置以及保存执行现场的步骤。

需要指出的是,终端检测到发生阻塞,可以在保存执行现场之前向服务器发送阻塞点位置,还可以在保存现场之后向服务器发送阻塞点位置。在本发明实施例中,对于终端发送阻塞点位置以及保存执行现场的步骤先后顺序不作具体限制。

其中,所述阻塞点位置为在转换后程序中发生阻塞的位置点,发生阻塞的原因例如可以包括读取外部数据命令、预设时长的等待命令等。

进一步地,所述保存执行现场可以包括:执行现场保存代码以保存所述原始程序的执行现场,所述现场保存代码来自于所述服务器。

具体地,在发生阻塞之前对转换后程序的执行现场进行保存,得到的执行现场状态可视为原始程序的执行现场状态。

更进一步地,所述现场保存代码可以安插于所述转换后程序中,由服务器一起发送至终端,还可以由服务器额外发送至终端。需要指出的是,服务器应当在发生同步阻塞之外的时间发送所述现场保存代码,以避免由于阻塞而无法成功收发。采用本发明实施例的方案,有助于灵活配置代码收发,从而提高发送效率。

在步骤s14的具体实施中,在终端保存执行现场之后,将执行所述阻塞对应的操作,例如当该操作读取外部数据、等待预设时长等,进而在执行所述阻塞对应的操作后恢复保存的执行现场,继续执行阻塞点位置之后的程序。

参照图2,图2是图1中步骤s14的一种具体实施方式的流程图,所述恢复所述执行现场并继续执行所述阻塞点位置之后的程序可以包括步骤s21至步骤s23,以下对各个步骤进行详细说明。

在步骤s21中,从所述服务器接收片段程序,所述片段程序为所述转换后程序在所述阻塞点位置之后的剩余部分。

具体地,所述片段程序可以是由服务器创建的。

可以理解的是,每当发生阻塞,均需要对该阻塞点位置之后的剩余部分创建片段程序,阻塞点越多,创建的片段程序越大,工作量也越大。相比于现有技术中,创建片段程序的工作通常需要人工完成,从而导致人工成本过高,效率低下,由服务器创建片段程序可以降低成本并且提高效率。

进一步地,所述片段程序可以是由服务器中的编译器创建的,例如可以采用即时编译器(just-in-timecompiler,jitcompiler)创建。

其中,jit编译器可以根据目标平台特性,将待转换代码转换成对于目标平台来说执行效率最高的代码形式。其中,目标平台特性例如可以包括终端的javascript语言版本,是否支持网页的汇编语言(webassembly)等。

在步骤s22中,执行现场恢复代码以恢复所述原始程序的执行现场,所述现场恢复代码来自于所述服务器。

进一步地,所述现场恢复代码可以安插于所述片段程序中,由服务器一起发送至终端,还可以预存在终端中。采用本发明实施例的方案,有助于节省信令开销,提高发送效率。

步骤s23:执行所述片段程序。

具体地,终端可以通过执行片段程序以实现继续执行所述阻塞点位置之后的程序。

在本发明实施例中,通过在服务器端创建阻塞检测代码,进而在终端执行所述阻塞检测代码以检测是否发生阻塞,相比于现有技术中依赖人工对阻塞点位置进行预判,可以准确地确定是否发生阻塞,从而在提高效率的同时,有效地提高程序运行的鲁棒性。并且通过在服务器端创建现场保存代码和现场恢复代码,进而在终端执行所述现场保存代码和现场恢复代码,以保存并且在阻塞点位置之后恢复所述原始程序的执行现场,相比于现有技术中在阻塞点位置之后的后一片段程序中,通过人工方式为执行现场的参数赋予阻塞点之前的前一片段程序的参数值,可以有效地降低人工成本,提高效率。

参照图3示出的本发明实施例中一种异步环境中模拟同步阻塞的方法的数据流图,所述异步环境中模拟同步阻塞的方法用于终端,可以包括步骤s31至步骤s39,以下对各个步骤进行说明。

步骤s31:终端32从服务器31接收转换程序,所述转换后程序中安插有阻塞检测代码和现场保存代码。

步骤s32:终端32执行所述转换后程序。

步骤s33:终端32执行阻塞检测代码以检测是否发生阻塞。

步骤s34:当终端32检测到发生阻塞时,终端32执行现场保存代码,以保存原始程序的执行现场。

步骤s35:终端32向服务器31发送阻塞点位置。

步骤s36:终端32执行所述阻塞对应的操作。

在具体实施中,终端32可以在检测到发生阻塞时立即向服务器31发送阻塞点位置,还可以在执行现场保存代码的过程中或之后发送阻塞点位置,还可以在执行所述阻塞对应的操作的过程中或者之后发送阻塞点位置。可以理解的是,较早发送阻塞点位置有助于服务器31尽早开始创建片段程序,从而减少或避免终端32等待片段程序的时间,提高效率。

步骤s37:终端32从服务器31接收片段程序,所述片段程序中安插有现场恢复代码。

步骤s38:终端32执行现场恢复代码,以恢复原始程序的执行现场。

在具体实施中,在终端32执行片段程序中的现场恢复代码之前,还可以包括终端32退出转换后程序的步骤,以避免在单线程环境下(例如javascript环境),由于转换后程序未退出而无法执行片段程序。

进一步地,在终端32退出转换后程序之前,还可以包括终端32注册回调函数的步骤,从而在终端32执行所述阻塞对应的操作后,启动回调函数,以触发有关片段程序的步骤。具体而言,当准备启动回调函数时,如果已经从服务器31收到片段程序,则通过启动回调函数,以触发执行片段程序的执行步骤;当准备启动回调函数时,如果尚未从服务器31收到片段程序,则通过启动回调函数,以触发请求服务器31发送片段程序的请求步骤。

步骤s39:终端32执行片段程序。

可以理解的是,当终端32执行片段程序时,仍然可以执行阻塞检测代码以检测是否发生阻塞,每当检测到发生阻塞时,均可以实施保存及恢复原始程序的执行现场的步骤。

关于图3示出的异步环境中模拟同步阻塞的方法的更多详细内容请参照前文及图1至图2示出的关于异步环境中模拟同步阻塞的方法的相关描述,此处不再赘述。

参照图4,图4是本发明实施例中另一种异步环境中模拟同步阻塞的方法的流程图。所述另一种异步环境中模拟同步阻塞的方法可以用于服务器,可以包括步骤s41至步骤s44:

步骤s41:将在同步环境下运行的原始程序进行转换得到在异步环境下运行的转换后程序,并且在所述转换后程序中安插阻塞检测代码;

步骤s42:向终端发送所述转换后程序,以使所述终端执行所述转换后程序,并且执行所述阻塞检测代码以检测是否发生阻塞;

步骤s43:从所述终端接收阻塞点位置,所述阻塞点位置是在所述终端检测到发生阻塞时发出的;

步骤s44:向所述终端发送片段程序,以使所述终端在执行所述阻塞对应的操作后,继续执行所述阻塞点位置之后的程序。

在步骤s41的具体实施中,服务器将在同步环境下运行的原始程序转换到在异步环境下运行的程序后,创建阻塞检测代码并且可以安插在所述转换后程序中。

在步骤s42的具体实施中,服务器将所述转换后程序发送至终端。

在步骤s43的具体实施中,服务器可以根据终端发送的阻塞点位置创建片段程序。

在步骤s44的具体实施中,服务器可以向终端发送片段程序,以使所述终端在执行所述阻塞对应的操作后,继续执行所述阻塞点位置之后的程序。

图5是本发明实施例中又一种异步环境中模拟同步阻塞的方法的部分流程图,所述又一种异步环境中模拟同步阻塞的方法可以用于服务器端,可以包括图4示出的步骤,还可以包括步骤s51至步骤s52:

步骤s51:向所述终端发送现场保存代码,以使所述终端保存所述原始程序的执行现场。

步骤s52:向所述终端发送现场恢复代码,以使所述终端在执行所述阻塞对应的操作后,恢复所述执行现场。

在步骤s51的具体实施中,所述现场保存代码可以安插于所述转换后程序中,由服务器一起发送至终端。

在步骤s52的具体实施中,所述现场恢复代码可以安插于所述片段程序中,由服务器一起发送至终端。

图6是图5示出的又一种异步环境中模拟同步阻塞的方法的数据流图,所述又一种异步环境中模拟同步阻塞的方法可以包括步骤s61至步骤s67:

步骤s61:服务器61将在同步环境下运行的原始程序进行转换得到在异步环境下运行的转换后程序;

步骤s62:服务器61在所述转换后程序中安插有阻塞检测代码和现场保存代码;

步骤s63:服务器61向终端62发送所述转换后程序;

步骤s64:服务器61从终端62接收阻塞点位置;

步骤s65:服务器61基于所述阻塞点位置创建片段程序;

步骤s66:服务器61在所述片段程序中安插有现场恢复代码;

步骤s67:服务器61向终端62发送所述片段程序。

关于图4至图6示出的异步环境中模拟同步阻塞的方法的更多详细内容请参照前文及图1至图3示出的关于异步环境中模拟同步阻塞的方法的相关描述,此处不再赘述。

参照图7,图7是本发明实施例中一种异步环境中模拟同步阻塞的装置的结构示意图。所述异步环境中模拟同步阻塞的装置可以包括转换后程序接收模块71、阻塞检测模块72、现场保存模块73以及现场恢复模块74。

其中,所述转换后程序接收模块71,适于从服务器接收转换后程序,所述转换后程序是将在同步环境下运行的原始程序转换得到的在异步环境下运行的程序,所述转换后程序中安插有阻塞检测代码;

所述阻塞检测模块72,适于当执行所述转换后程序时,执行所述阻塞检测代码以检测是否发生阻塞;

所述现场保存模块73,适于当检测到发生阻塞时,向服务器发送阻塞点位置,并保存执行现场;

所述现场恢复模块74,适于执行所述阻塞对应的操作后,恢复所述执行现场并继续执行所述阻塞点位置之后的程序。

进一步地,所述现场保存模块可以包括:保存代码执行子模块(图未示),适于执行现场保存代码以保存所述原始程序的执行现场,所述现场保存代码来自于所述服务器。

进一步地,所述现场保存代码安插于所述转换后程序中。

图8是图7中现场恢复模块74的一种具体实施方式的结果示意图。所述现场恢复模块74可以包括片段程序接收子模块741、恢复现场子模块742以及片段程序执行子模块743。

其中,所述片段程序接收子模块741,适于从所述服务器接收片段程序,所述片段程序为所述转换后程序在所述阻塞点位置之后的剩余部分;

所述恢复现场子模块742,适于执行现场恢复代码以恢复所述原始程序的执行现场,所述现场恢复代码来自于所述服务器;

所述片段程序执行子模块743,适于执行所述片段程序。

进一步地,所述现场恢复代码安插于所述片段程序中。

所述片段程序是由编译器创建的。

图9是本发明实施例中另一种异步环境中模拟同步阻塞的装置的结构示意图。所述另一种异步环境中模拟同步阻塞的装置可以包括程序转换模块91、转换后程序发送模块92、阻塞点位置接收模块93、片段程序发送模块94、保存代码发送模块95以及恢复代码发送模块96。

其中,所述程序转换模块91,适于将在同步环境下运行的原始程序进行转换得到在异步环境下运行的转换后程序,并且在所述转换后程序中安插阻塞检测代码;

所述转换后程序发送模块92,适于向终端发送所述转换后程序,以使所述终端执行所述转换后程序,并且执行所述阻塞检测代码以检测是否发生阻塞;

所述阻塞点位置接收模块93,适于从所述终端接收阻塞点位置,所述阻塞点位置是在所述终端检测到发生阻塞时发出的;

所述片段程序发送模块94,适于向所述终端发送片段程序,以使所述终端在执行所述阻塞对应的操作后,继续执行所述阻塞点位置之后的程序。

所述保存代码发送模块95,适于向所述终端发送现场保存代码,以使所述终端保存所述原始程序的执行现场;

所述恢复代码发送模块96,适于向所述终端发送现场恢复代码,以使所述终端在执行所述阻塞对应的操作后,恢复所述执行现场。

进一步地,所述现场保存代码和安插于所述转换后程序中。

所述现场恢复代码安插于所述片段程序中。

图10是图9中片段程序发送模块94的一种具体实施方式的结果示意图。所述片段程序发送模块94可以包括片段程序创建子模块941以及片段程序发送子模块942。

其中,所述片段程序创建子模块941,适于基于所述阻塞点位置创建片段程序,所述片段程序为所述转换后程序在所述阻塞点位置之后的剩余部分;

所述片段程序发送子模块942,适于向终端发送所述片段程序。

进一步地,所述片段程序是由编译器创建的。

关于该异步环境中模拟同步阻塞的装置的更多详细内容请参照前文及图1至图6示出的关于异步环境中模拟同步阻塞的方法的相关描述,此处不再赘述。

本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机指令,所述计算机指令运行时执行上述异步环境中模拟同步阻塞的方法的步骤。所述异步环境中模拟同步阻塞的方法可以用于终端,所述计算机可读存储介质可以是光盘、机械硬盘、固态硬盘等。

本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机指令,所述计算机指令运行时执行上述异步环境中模拟同步阻塞的方法的步骤。所述异步环境中模拟同步阻塞的方法可以用于服务器,所述计算机可读存储介质可以是光盘、机械硬盘、固态硬盘等。

本发明实施例还提供了一种终端,包括存储器和处理器,所述存储器上存储有能够在所述处理器上运行的计算机指令,所述处理器运行所述计算机指令时执行上述异步环境中模拟同步阻塞的方法的步骤。

本发明实施例还提供了一种服务器,包括存储器和处理器,所述存储器上存储有能够在所述处理器上运行的计算机指令,所述处理器运行所述计算机指令时执行上述异步环境中模拟同步阻塞的方法的步骤。

虽然本发明披露如上,但本发明并非限定于此。任何本领域技术人员,在不脱离本发明的精神和范围内,均可作各种更动与修改,因此本发明的保护范围应当以权利要求所限定的范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1