进程管理及进程间通信方法、装置、计算设备及存储介质
技术领域
本公开涉及计算机技术领域,特别是涉及一种进程管理及进程间通信方法、装置、计算设备及存储介质。
背景技术
待机时间和用户界面流畅度是衡量手机、IPAD等移动设备的用户体验的重要指标。如果一个应用进入后台后,还继续无限制的运行,就会占用CPU,影响前台进程的运行,消耗设备的电量。因此需要一个后台应用管理机制来限制后台应用的运行。
以Android系统为例,Android系统提供的Activity管理服务(简称AMS)可以对进程进行管理。具体地,Android的Activity在进入后台时,会收到AMS发出的onPause和onStop两个事件,Activity可以在这两个事件回调中做一些状态的保存和资源的释放工作;AMS不强制要求Activity进程进入后台后就退出,Activity进程可以选择继续在后台运行或者退出;Android系统对进程进行分类:前台进程,可见进程,次要服务,后台进程,内容提供者,空进程;在内存紧张的情况下,系统会根据进程的重要性强制部分进程退出来释放内存。
AMS的缺点在于,应用进程进入后台后,Android系统不会强制要求应用退出,也没有对应用在后台的行为进行限制,因此会持续消耗CPU和电量,影响前台进程的执行以及增加系统的功耗。
因此,仍然需要一种行之有效的进程管理方案。
发明内容
本公开要解决的技术问题是提供一种行之有效的进程管理方案。
根据本公开的第一个方面,提供了一种进程管理方法,包括:为第一进程维护第一线程,第一进程包括一个或多个应用线程,一个或多个应用线程用于实现预定的功能,每个应用线程通过第一线程接收来自第一进程外部的消息和/或向第一进程外部发送消息;根据第一线程接收到的消息的类型,切换第一进程的运行状态。
可选地,可以由第一线程根据接收到的消息的类型,切换第一进程的运行状态。
可选地,根据第一线程接收到的消息类型切换第一进程的运行状态的步骤可以包括:在第一线程接收到进程管理服务发送的前台展示消息的情况下,切换第一进程进入前台运行状态。
可选地,该进程管理方法还可以包括:为第二进程维护第二线程;在第一进程处于前台运行状态的情况下,第一进程通过第一线程与第二线程通信,实现与第二进程的通信。
可选地,第二进程包括一个或多个应用线程,第一进程的应用线程通过第一线程与第二线程通信,实现与第二进程的应用线程的通信。
可选地,根据第一线程接收到的消息类型切换第一进程的运行状态的步骤可以包括:在第一线程接收到进程管理服务发送的停止运行消息的情况下,结束第一进程。
可选地,根据第一线程接收到的消息类型切换第一进程的运行状态的步骤可以包括:在第一线程接收到进程管理服务发送的后台隐藏消息的情况下,切换第一进程进入后台运行状态。
可选地,该进程管理方法还可以包括:在第一进程处于后台运行状态的情况下,禁止第一进程启动或请求启动其它进程。
可选地,该进程管理方法还可以包括:在第一进程进入后台运行状态的时间超过预定时间阈值的情况下,挂起第一进程。
可选地,可以为第一进程预先声明了其所支持的一种或多种后台运行模式,每种后台运行模式具有预定义的一个或多个事件,根据第一线程接收到的消息类型切换第一进程的运行状态的步骤包括:在第一进程被挂起,且第一线程接收到的消息符合第一进程所支持的后台运行模式所定义的事件的情况下,切换第一进程进入后台运行状态。
可选地,挂起第一进程的步骤可以包括:由第一线程将应用线程标记为挂起;在应用线程检查到自身被标记为挂起的情况下,将自己的状态设置为睡眠。
可选地,由第一线程将应用线程标记为挂起的步骤包括:第一线程为应用线程在内核中添加标记位,用于标记应用线程是否需要挂起。
可选地,该进程管理方法还包括:应用线程在每次从内核模式返回到用户模式前,检查自身是否被标记为挂起。
可选地,该进程管理方法还包括:在挂起第一进程前,第一进程执行状态保存和/或资源清理操作。
根据本公开的第二个方面,还提供了一种进程间通信方法,包括;为第一进程维护第一线程;为第二进程维护第二线程;第一进程通过第一线程与第二线程通信,实现与第二进程的通信。
可选地,每个进程包括一个或多个应用线程,第一进程中的应用线程通过第一线程与第二线程通信,实现与第二进程中的应用线程的通信。
根据本公开的第三个方面,还提供了一种进程管理装置,包括:第一线程维护单元,用于为第一进程维护第一线程,第一进程包括一个或多个应用线程,一个或多个应用线程用于实现预定的功能,每个应用线程通过第一线程接收来自第一进程外部的消息和/或向第一进程外部发送消息;以及状态切换单元,用于根据第一线程接收到的消息的类型,切换第一进程的运行状态。
可选地,在第一线程接收到进程管理服务发送的前台展示消息的情况下,状态切换单元切换第一进程进入前台运行状态。
可选地,进程管理装置还包括:第二线程维护单元,用于为第二进程维护第二线程,在第一进程处于前台运行状态的情况下,第一进程能够通过第一线程与第二线程通信,实现与第二进程的通信。
可选地,第二进程包括一个或多个应用线程,第一进程的应用线程通过第一线程与第二线程通信,实现与第二进程的应用线程的通信。
可选地,在第一线程接收到进程管理服务发送的停止运行消息的情况下,状态切换单元结束第一进程。
可选地,在第一线程接收到进程管理服务发送的后台隐藏消息的情况下,状态切换单元切换第一进程进入后台运行状态。
可选地,进程管理装置还包括:通信禁止单元,用于在第一进程处于后台运行状态的情况下,禁止第一进程启动或请求启动其它进程。
可选地,进程管理装置还包括:挂起单元,用于在第一进程进入后台运行状态的时间超过预定时间阈值的情况下,挂起第一进程。
可选地,进程管理装置还包括:声明单元,用于为第一进程预先声明了其所支持的一种或多种后台运行模式,每种后台运行模式具有预定义的一个或多个事件,在第一进程被挂起,且第一线程接收到的消息符合第一进程所支持的后台运行模式所定义的事件的情况下,状态切换单元切换第一进程进入后台运行状态。
可选地,挂起单元通过第一线程将应用线程标记为挂起,在应用线程检查到自身被标记为挂起的情况下,应用线程将自己的状态设置为睡眠。
可选地,挂起单元通过第一线程为应用线程在内核中添加标记位,标记位用于标记应用线程是否需要挂起,
可选地,应用线程每次从内核模式返回到用户模式前,检查自身是否被标记为挂起。
可选地,在挂起第一进程前,第一进程还执行状态保存和/或资源清理操作。
根据本公开的第四个方面,还提供了一种进程间通信装置,包括;第一线程维护单元,用于为第一进程维护第一线程;以及第二线程维护单元,用于为第二进程维护第二线程,第一进程通过第一线程与第二线程通信,实现与第二进程的通信。
可选地,每个进程包括一个或多个应用线程,第一进程中的应用线程通过第一线程与第二线程通信,实现与第二进程中的应用线程的通信。
根据本公开的第五个方面,还提供了一种计算设备,包括:处理器;以及存储器,其上存储有可执行代码,当可执行代码被处理器执行时,使处理器执行本公开的第一个方面或第二个方面述及的方法。
根据本公开的第六个方面,还提供了一种非暂时性机器可读存储介质,其上存储有可执行代码,当可执行代码被电子设备的处理器执行时,使处理器执行本公开的第一个方面或第二个方面述及的方法。
由此,可以通过为进程维护的线程(即下文中述及的消息线程),实现进程的通信,并且还可以根据该线程接收到的消息的类型,切换进程的运行状态,实现对进程的管理。
附图说明
通过结合附图对本公开示例性实施方式进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施方式中,相同的参考标号通常代表相同部件。
图1示出了根据本公开一实施例的进程间的通信方法的示意性流程图。
图2示出了根据本公开一实施例的进程在不同运行状态间进行切换的示意图。
图3示出了根据本公开一实施例的进程管理装置的结构示意图。
图4示出了根据本公开一实施例的进程间通信装置的结构示意图。
图5示出了根据本公开一实施例的计算设备的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
【术语解析】
(1)Page
Page称为服务组件,是对操作系统中本地服务和远程服务的抽象,也即服务的基本单元,通过对数据和方法的封装,可以提供各种服务。一个服务场景可以包括多个Page。举例来说,一个Page可以是UI(用户界面)、拍照等服务,也可以是后台服务,如账户认证。
运行态Page可以称为Page实例,也可称为Page进程,是本地服务或远程服务的运行载体,可由DPMS创建(比如DPMS收到PageA发送的指向PageB的PageLink后可创建PageB的实例)、调度、管理,DPMS可维护Page实例的生命周期。
每个Page可以在操作系统(例如AliOS)中被唯一标识,比如可以使用URI(UniformResource Identifier,唯一资源标识符)对Page进行标识。URI可以通过各种方式生成,只要可以保证唯一性即可,本申请并不对URI的生成方式进行限制。
URI可以理解为一个地址链接,通过该URI可以唯一地确定出其对应的Page。例如,为了便于区分Page提供的服务,为该Page分配的URI中可以选择性地包括该服务的相关信息,例如:服务名称、服务内容、服务提供方等。例如:A公司提供的日历服务,为其对应的Page分配的URI可以为,Page://calendar.a.com,其中:“Page://”用于区分该地址为Page对应的地址,以和其它类型的地址区分;“calendar”表示提供的服务名称;“a”表示该服务的提供方。
根据场景需求,一个Page可能需要创建多个Page实例,为便于区分同一Page的不同实例,可以进一步为每个Page实例分配唯一的Page ID进行标识,该标识可以在Page实例被创建时分配。Page实例是指Page的运行态,即本地或远程服务的运行载体,由DPMS(Dynamic Page Manager Service,动态Page管理服务)创建调度并管理其生命周期。进一步地,该Page ID可以被携带在信息实体PageLink中传递。
Page之间可以传递事件和/或数据,Page可以通过UI与用户进行交互,以提供服务。例如,PageA可以向PageB发送事件(Event),并从PageB获取返回的数据(Data),PageA可以通过UI与用户交互。其中,PageA可以提供服务A,PageB可以提供服务B。进一步地,PageA还可以以UI方式向用户提供显示界面,通过该界面为用户展示服务以及接收用户的各种输入,PageB可以主要在后台运行,可以为其它Page提供服务支持。
Page可被创建和销毁。Page从创建到销毁有三种状态:
Created(建立)状态:表示Page被创建,Page被创建(即被实例化)后首先进入Created状态;
Running(运行)状态:Page被激活后进入Running状态,Running状态下的Page之间能够传递事件和/或数据,以及能够处理其它Running状态的Page传递来的事件和/或数据;
Stopped(停止)状态:Page被去激活后进入Stopped状态,Stopped状态下的Page不能够与其它Page进行事件和/或数据的传递。
Page可在上述不同状态之间进行转换,并在转换的时接收到生命事件通知,该生命事件通知用于指示Page转换后的状态。其中,Page的状态转换以及生命事件通知可以由DPMS控制。例如,当Page从Created状态进入Running状态时,会收到onStart事件,当Page从Running状态进入Stopped状态时,会收到onStop事件,Page在Running状态下,可以通过onLink接口接收到其它Page发来的Pagelink。其中,onStart事件是用于指示Page开始进入Running状态的生命事件通知,onStop事件是用于指示Page开始进入Stopped状态的生命事件通知。
若Page具有用UI(用户界面),则Running状态可以扩展成为以下三种状态中的一种:
Hided(隐藏)状态:也即后台运行状态,Hided状态下的Page能够在后台运行,对于用户来说不可见;
Showed-inactive(可见地非交互)状态:Showed-inactive状态下的Page对于用户来说可见,但是不响应用户输入;
Showed-active(可见地交互)状态:Showed-active状态下的Page对用户来说可见,并且可以响应用户输入。
Showed-inactive和Showed-active均可称为前台运行状态。例如:PageA为全屏窗口,PageB为非全屏窗口,当PageB在PageA之上显示时,PageA是Showed-inactive状态,PageB是Showed-active状态。
通过生命事件通知,Page可在上述不同状态之间进行转换。图3示出了Page状态转换示意图,如图所示,Hided状态下的Page收到onShow事件后进入Showed-inactive状态,Showed-inactive状态下的Page收到onHide事件后进入Hided状态;Showed-inactive状态下的Page收到onActive事件后进入Showed-active状态,Showed-active状态下的Page收到onInactive事件后进入Showed-inactive状态。
(2)PageLink
PageLink是Page之间流转的信息实体,可以在Page间传递信息,例如,事件和/或数据等。具体传递数据可以使用设定的API(Application Programming Interface,应用程序编程接口),AliOS以此为基础记录服务组件之间的关联关系。PageLink可以指定目标Page的URI,并且可以包含事件、数据、服务等信息中的一种或多种。
Page通过PageLink以更加灵活的方式的组合,可以实现丰富的服务场景。
(3)DPMS
DPMS是Dynamic Page Manager Service的英文简称,中文称为动态Page管理服务,是操作系统中用来对Page运行实例进行生命周期管理的服务,可以被看作是服务组件管理实体,是一种系统服务。DPMS可以管理Page生命周期以及运行时调度,Page从创建到销毁的生命周期管理,以及Page间经PageLink的交互都可以通过DPMS实现。
(4)UBus
UBus,本公开提出的进程间通信机制。
(5)AMS
AMS,Activity Manager Service的英文简称,安卓系统Activity管理服务。
(6)内核
内核,是一个操作系统的核心。是基于硬件的第一层软件扩充,提供操作系统的最基本的功能,是操作系统工作的基础,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。现代操作系统设计中,为减少系统本身的开销,往往将一些与硬件紧密相关的(如中断处理程序、设备驱动程序等)、基本的、公共的、运行频率较高的模块(如时钟管理、进程调度等)以及关键性数据结构独立开来,使之常驻内存,并对他们进行保护。通常把这一部分称之为操作系统的内核。
(7)内核模式
内核模式(内核态),对应处理器的最高权限级别,在内核模式下执行的代码可以访问所有资源并可以执行所有特权指令。
(8)用户模式
用户模式(用户态),具有较低的优先级,用户模式只能访问用户空间,且不能执行特权指令。
(9)设备驱动
设备驱动,是操作系统和输入输出设备间的粘合剂。驱动负责将操作系统的请求传输,转化为特定物理设备控制器能够理解的命令。
【方案概述】
本公开提出了一种可以用于对iOS、Android、AliOS等操作系统中运行的进程进行管理的进程管理方案。如本领域对进程的定义,进程可以是指一个具有独立功能的程序关于某个数据集合的一次运行活动。在本公开中,进程可以是指运行在iOS、Android、AliOS等操作系统中的用于执行特定应用实例的进程,例如可以是AliOS中的Page进程,也可以是Android中启动Activity组件的进程,可以称为Activity进程。每个进程可以包括一个或多个线程(为了便于区分,可以称为“应用线程”),这一个或多个应用线程可以用于实现预定的功能。
本公开的进程管理方案为进程(为了便于区分,可以称为“第一进程”)维护专门用于通信的线程(第一线程,也可称为“消息线程”),第一进程可以通过消息线程向第一进程外部发送消息,接收来自第一进程外部的消息。并且可以根据消息线程接收到来自第一进程外部的消息的类型,切换第一进程的运行状态(可以由消息线程实现切换)。此外,消息线程还可以根据第一进程的运行状态,控制第一进程的通信,即消息线程还可以根据第一进程的运行状态过滤向第一线程外部发送的消息以及过滤接收来自第一进程外部的消息。例如,第一进程在处于挂起状态下,消息线程可以过滤接收到的来自第一进程外部的普通消息,第一进程在后台运行的情况下,可以禁止其启动或请求启动其它新的进程,即第一进程在处于后台运行状态下,禁止第一进程自身启动新的其它进程,也禁止第一进程请求第三方(例如进程管理服务DPMS)启动新的进程。换言之,第一进程在后台运行状态下,只能和已有的进程通信,不能启动新进程来通信。其中,其它进程优选地是指与第一进程属于不同的应用实例的第三方进程。
在详细描述本公开的方案之前,首先就本公开涉及的消息类型和进程的运行状态进行说明。
【消息的类型】
onHide,后台隐藏消息。可以是进程管理服务(例如Alios中的DPMS,Android中的AMS)发送给进程(例如Page进程,Activity进程)的消息,提示进程将要隐藏,进入后台运行。
onShow,前台展示消息。进程管理服务发送给进程的消息,提示进程将要显示,进入前台运行。
onStop,停止运行消息。进程管理服务发送给进程的消息,提示进程将要停止。
Event,预定义消息。系统可以预定义一种或多种后台运行模式,不同的模式可以具有自己预定义的一些事件。可以为进程预先声明它支持哪些后台运行模式。符合进程所支持的后台运行模式所定义的事件的消息即为预定义消息。
普通消息,除了以上消息之外的消息。
【进程的运行状态】
Started,开始状态,进程被创建。
Suspending,后台运行状态,进程在后台运行,在挂起过程中,此时进程可以运行,但是运行受限,无法启动新的进程(第三方进程)。
Running,前台运行状态,进程在前台,处于正常状态,可以启动新的进程(第三方进程)。
Suspended,挂起状态,进程在后台,且已经被挂起,无法执行任何代码。
Exited,退出状态,进程退出,结束进程。
【进程间通信】
图1示出了根据本公开一实施例的进程间的通信方法的示意性流程图。
如图1所示,可以分别为进程A和进程B维护一个消息线程,为了便于区分,为进程A(也可称为第一进程)维护的消息线程可以称为第一线程,为进程B(也可称为第二进程)维护的消息线程可以称为第二线程。
进程A和进程B可以通过第一线程和第二线程之间的通信,实现进程间的通信。具体地,进程A可以通过第一线程向第二线程发送消息或者接收第二线程发送的消息,实现与进程B的通信。
如图1所示,进程A可以包括一个或多个应用线程,进程B也可以包括一个或多个应用线程。进程A的应用线程可以通过第一线程向第二线程发送消息或者接收第二线程发送的消息,以实现与进程B的应用线程的通信。
综上,为进程维护的消息线程(上文述及的第一线程/第二线程)可以专门负责与其它进程的消息线程进行通信,即消息的发送和接收都需要经过消息线程,因此消息线程还可以根据进程的运行状态过滤接收到的消息以及过滤进程向外发送的消息。例如,在进程在后台运行的过程中,消息线程可以禁止发送用于启动新的进程的消息,以避免进程间相互唤醒。其中,在进程处于后台运行状态的情况下,可以禁止第一进程自身启动新的进程,也可以禁止第一进程请求其它方(例如进程管理服务DPMS)启动新的进程。
由此,本公开提出了一种新的进程间通信机制(UBus),为进程维护消息线程(上文述及的第一进程/第二进程),基于消息线程实现进程间的通信。
进一步地,为进程维护的消息线程还可以根据接收到的消息的类型,切换进程的运行状态。其中消息线程接收到的消息可以包括上文述及的进程管理服务发送的onHide、onShow、onStop等进程管理消息、其它发送方(例如其它进程)发送的预定义消息Event以及普通消息。在消息线程接收到非普通消息的情况下,还可以根据消息线程接收到的消息的具体类型,切换进程的运行状态。其中,可以由消息线程根据其接收到的消息的具体类型,切换进程的运行状态。
【进程的运行状态的切换】
图2示出了根据本公开一实施例的进程在不同运行状态间进行切换的示意图。
如图2所示,进程被创建(Started)后首先会进入后台运行状态(Suspending)。
在Suspending下,如果消息线程接收到停止运行消息(onStop),则会进入退出(Exited)状态,结束线程;如果消息线程接收到前台展示消息(onShow),则会进入前台运行状态(Running);如果进程进入后台运行状态的时间超过预定时间阈值,即Timeout,则会进入挂起状态(Suspended),避免CPU的占用以及电量的消耗。另外,在Suspending下,如果消息线程接收到预定义消息(Event),进程状态不变,仍为后台运行状态(Suspending),并且进程可以执行预定义消息(Event)所指示的事件。
在前台运行状态下,如果消息线程接收到后台隐藏消息(onHide),则会切换进程进入后台运行状态(Suspending);如果消息线程接收到停止运行消息(onStop),则会进入Exited状态,结束线程。
在挂起状态(Suspended)下,如果消息线程接收到预定义的消息(Event),则会切换进程进入后台运行状态(Suspending),执行预定义消息(Event)所指示的事件;如果消息线程接收到停止运行消息(onStop),则会进入Exited状态,结束线程;如果消息线程接收到前台展示消息(onShow),则会进入前台运行状态(Running)。
需要说明的是,如果没有为进程声明其所支持的后台运行模式,在进程进入后台运行状态的时间超过预定时间阈值的情况下,可以直接将整个进程挂起,例如可以由消息线程向进程发送信号SIGSTOP将整个进程挂起。如果为进程声明了其所支持的后台运行模式,在进程进入后台运行状态超过预定时间阈值的情况下,也可以不把进程挂起,但只允许进程接收符合其支持的后台运行模式中预定义的事件的消息。
另外,在挂起进程之前,进程还可以执行状态保存和/或资源清理的操作。例如,在挂起进程之前,可以由系统调用进程上注册的相关方法/函数(如onSuspend方法/函数)进行回调,允许进程做一些状态保存和资源清理工作。
并且,在离开挂起状态(Suspended)进入其它状态时,系统也可以调用进程上注册的相关方法/函数进行回调。例如,在离开Suspended状态进入前台展示状态(Running)时,系统可以调用进程上注册的onResume方法/函数进行回调。
【应用线程的挂起和唤醒】
如上文所述,进程可以包括一个或多个应用线程,当需要挂起进程时,可以由消息线程将进程的应用线程(可以是所有应用线程)标记为挂起,如果应用线程检查到自己被标记为挂起,则会进入睡眠,不再占用CPU,即应用线程进入挂起状态。
当应用线程被挂起后,如果消息线程接收到能够唤醒应用线程的消息(例如预定义消息Event),则可以唤醒应用线程,让应用线程继续执行。
需要说明的是,在进程进入后台运行状态超过预定时间阈值需要挂起时,可以将进程中的所有应用线程挂起。在进程中的所有应用线程被挂起后,消息线程在接收到用于唤醒应用线程的消息时,可以仅对接收到的消息所针对的应用线程进行唤醒,对于接收到的消息没有针对的其它应用线程,可以继续保持其挂起状态。
具体地,消息线程在接收到针对进程中的某一个或某几个应用线程的消息后,可以检查接收到的消息的类型,如果是普通消息,则消息线程会再次将消息所针对的应用线程标记为挂起,如果不是普通消息,例如如果是进程所支持的预定义消息Event,则可以唤醒相应的(即消息所针对的)应用线程,让应用线程继续执行。
在进程被挂起后,如果接收到进程管理服务发送过来的进程管理消息,例如上文述及的onHide、onShow、onStop等进程管理消息,则可以根据进程管理消息的类型切换进程(也即进程中的所有应用线程)的运行状态。其中,根据接收到的消息的类型进行状态切换的实现过程可以参见上文相关说明,此处不再赘述。
为了实现应用线程的挂起和唤醒,可以由消息线程为应用线程在内核中添加标记位,用于表示应用线程是否需要挂起。例如,可以创建一个设备驱动,提供两个接口,分别应用于:标记应用线程需要挂起;标记应用线程不需要挂起,并且唤醒线程。消息线程可以通过访问这两个接口,为应用线程是否需要挂起进行标记。
应用线程在每次从内核模式返回到用户模式前,可以检查自身是否被标记为挂起。如果被标记为挂起,则进入睡眠,不再占用CPU,如果应用线程在挂起后被重新标记为不挂起,则可以被唤醒,继续运行。
【进程管理装置】
图3示出了根据本公开一实施例的进程管理装置的结构示意图。其中,进程管理装置300的功能模块可以由实现本发明原理的硬件、软件或硬件和软件的结合来实现。本领域技术人员可以理解的是,图3所描述的功能模块可以组合起来或者划分成子模块,从而实现上述发明的原理。因此,本文的描述可以支持对本文描述的功能模块的任何可能的组合、或者划分、或者更进一步的限定。
进程管理装置300可以具有的功能模块以及各功能模块可以执行的操作做简要说明,对于其中涉及的细节部分可以参见上文描述,这里不再赘述。
参见图3,进程管理装置300可以包括第一线程维护单元310和状态切换单元320。
第一线程维护单元310可以为第一进程维护第一线程(即上文述及的消息线程)。第一进程包括一个或多个应用线程,所述一个或多个应用线程用于实现预定的功能,每个应用线程可以通过第一线程接收来自第一进程外部的消息和/或向第一进程外部发送消息。
根据第一线程接收到的消息的类型,状态切换单元320可以切换第一进程的运行状态。其中,状态切换单元320能够执行的操作均可以由第一线程实现。
具体地,在第一线程接收到进程管理服务发送的前台展示消息的情况下,状态切换单元320可以切换第一进程进入前台运行状态;在第一线程接收到进程管理服务发送的停止运行消息的情况下,状态切换单元320可以结束第一进程;在第一线程接收到进程管理服务发送的后台隐藏消息的情况下,状态切换单元320可以切换第一进程进入后台运行状态。
如图3所示,进程管理装置300还可以可选地包括图中虚线框所示的第二进程维护单元330。第二线程维护单元330可以为第二进程维护第二线程,在第一进程处于前台运行状态的情况下,第一进程能够通过第一线程与第二线程通信,实现与第二进程的通信。
如图3所示,进程管理装置300还可以可选地包括图中虚线框所示的通信禁止单元340。在所述第一进程处于后台运行状态的情况下,通信禁止单元340可以禁止第一进程启动或请求启动其它进程。其中,通信禁止单元340可以通过第一线程过滤过滤第一进程发送的消息,来禁止第一进程启动或请求启动其它进程,避免进程间的唤醒。
如图3所示,进程管理装置300还可以可选地包括图中虚线框所示的挂起单元350。在第一进程进入后台运行状态的时间超过预定时间阈值的情况下,可以由挂起单元350挂起第一进程。其中,挂起单元350可以通过第一线程将应用线程标记为挂起,例如,挂起单元350可以通过第一线程为应用线程在内核中增加标记位,标记位用于标记所述应用线程是否需要挂起,应用线程每次从内核模式返回到用户模式前,可以检查自身是否被标记为挂起。在应用线程检查到自身被标记为挂起的情况下,应用线程可以将自己的状态设置为睡眠,不再占用CPU。
如图3所示,进程管理装置300还可以可选地包括图中虚线框所示的声明单元360。
声明单元360可以为第一进程预先声明了其所支持的一种或多种后台运行模式,每种后台运行模式具有预定义的一个或多个事件。在第一进程被挂起,且第一线程接收到的消息符合第一进程所支持的后台运行模式所定义的事件的情况下,可以由状态切换单元320切换第一进程进入后台运行状态。
【进程间通信装置】
图4示出了根据本公开一实施例的进程间通信装置的结构示意图。其中,进程间通信装置400的功能模块可以由实现本发明原理的硬件、软件或硬件和软件的结合来实现。本领域技术人员可以理解的是,图4所描述的功能模块可以组合起来或者划分成子模块,从而实现上述发明的原理。因此,本文的描述可以支持对本文描述的功能模块的任何可能的组合、或者划分、或者更进一步的限定。
进程间通信装置400可以具有的功能模块以及各功能模块可以执行的操作做简要说明,对于其中涉及的细节部分可以参见上文描述,这里不再赘述。
参见图4,进程间通信装置400可以包括第一线程维护单元410和第二线程维护单元420。
第一线程维护单元410可以用于为第一进程维护第一线程。第二线程维护单元420可以为第二进程维护第二线程。
此处述及的第一线程和第二线程与上文述及的消息线程相同。第一进程可以包括一个或多个应用线程,第一进程的应用线程可以通过第一线程接收和/或发送消息。第二进程也可以包括一个或多个应用线程,第二进程的应用线程可以通过第二线程接收和/或发送消息。
对于第一进程和第二进程而言,第一进程可以通过第一线程与第二线程通信,实现与第二进程的通信。也即,第一进程中的应用线程可以通过第一线程与第二线程通信,实现与第二进程中的应用线程的通信。
进一步地,第一线程和第二线程还可以根据各自进程的运行状态,对各自进程发送的消息和接收的消息进程过滤,并且还可以根据接收到的消息的类型,对进程的运行状态进行切换,其中关于进程的切换可以参见上相关说明,此处不再赘述。
【计算设备】
图5示出了根据本公开一实施例的计算设备的结构示意图。其中,计算设备500可以是可以实施为各种类型的计算装置,例如台式机、便携式计算机、平板电脑、智能手机、个人数据助理(PDA),或者其它类型的计算机装置,但是不限于任何特定形式。其中计算设备500的操作系统可以是IOS、Android、Alios等操作系统。
如图5所示,本公开的计算设备500可以包括处理器510以及存储器520。处理器510可以是一个多核的处理器,也可以包含多个处理器。在一些实施例中,处理器510可以包含一个通用的主处理器以及一个或多个特殊的协处理器,例如图形处理器(GPU)、数字信号处理器(DSP)等等。在一些实施例中,处理器510可以使用定制的电路实现,例如特定用途集成电路(Application Specific Integrated Circuit,ASIC)或者现场可编程逻辑门阵列(Field Programmable Gate Arrays,FPGA)。
存储器520可以包括各种类型的存储单元,例如系统内存、只读存储器(ROM),和永久存储装置。其中,ROM可以存储处理器510或者计算机的其它模块需要的静态数据或者指令。永久存储装置可以是可读写的存储装置。永久存储装置可以是即使计算机断电后也不会失去存储的指令和数据的非易失性存储设备。在一些实施方式中,永久性存储装置采用大容量存储装置(例如磁或光盘、闪存)作为永久存储装置。另外一些实施方式中,永久性存储装置可以是可移除的存储设备(例如软盘、光驱)。系统内存可以是可读写存储设备或者易失性可读写存储设备,例如动态随机访问内存。系统内存可以存储一些或者所有处理器在运行时需要的指令和数据。此外,存储器520可以包括任意计算机可读存储媒介的组合,包括各种类型的半导体存储芯片(DRAM,SRAM,SDRAM,闪存,可编程只读存储器),磁盘和/或光盘也可以采用。在一些实施方式中,存储器520可以包括可读和/或写的可移除的存储设备,例如激光唱片(CD)、只读数字多功能光盘(例如DVD-ROM,双层DVD-ROM)、只读蓝光光盘、超密度光盘、闪存卡(例如SD卡、min SD卡、Micro-SD卡等等)、磁性软盘等等。计算机可读存储媒介不包含载波和通过无线或有线传输的瞬间电子信号。
在本发明实施例中,存储器520上存储有可执行代码,处理器510可以执行存储在存储器520上的可执行代码。当可执行代码被处理器510执行时,可以使处理器510执行本发明的用户行为预测及推荐方法。其中,存储器520上除了存储可执行代码,还可以存储处理器510在执行本发明的方案过程中所需的部分或所有数据。
上文中已经参考附图详细描述了根据本发明的进程管理及进程间通信方法、装置、计算设备。
此外,根据本发明的方法还可以实现为一种计算机程序或计算机程序产品,该计算机程序或计算机程序产品包括用于执行本发明的上述方法中限定的上述各步骤的计算机程序代码指令。
或者,本发明还可以实施为一种非暂时性机器可读存储介质(或计算机可读存储介质、或机器可读存储介质),其上存储有可执行代码(或计算机程序、或计算机指令代码),当所述可执行代码(或计算机程序、或计算机指令代码)被电子设备(或计算设备、服务器等)的处理器执行时,使所述处理器执行根据本发明的上述方法的各个步骤。
本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。
附图中的流程图和框图显示了根据本发明的多个实施例的系统和方法的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标记的功能也可以以不同于附图中所标记的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。