进程间资源共享方法、装置与电子设备与流程

文档序号:24159178发布日期:2021-03-05 14:17阅读:120来源:国知局
进程间资源共享方法、装置与电子设备与流程

[0001]
本公开涉及计算机技术领域,具体而言,涉及一种进程间资源共享方法、装置与电子设备。


背景技术:

[0002]
在相关android技术中,进程在访问数据对象时需要通过contentresolver和系统服务ams(activitymanagetservice,动态管理服务)向数据对象发起数据访问请求,其中ams运行在system_server服务进程中,是管理android组件的核心服务,负责了系统中四大组件的启动、切换、调度以及应用进程管理和调度工作。ams收到数据访问请求后返回一个icontentprovider代理接口,使进程通过这个代理接口获得一个能够访问该数据对象的访问入口cursor(游标,是android系统中处理数据的一种方法,为了查看或者处理结果集中的数据,cursor可以在结果集中一次一行或者多行前进或向后浏览数据)。
[0003]
在多个进程需要相互协作地对同一数据对象进行访问时,即多个进程对同一数据对象的访问操作之间有相互依赖关系时,由于cursor无法跨进程传递,每个进程均需要通过一个单独的cursor对数据对象进行访问,并在进程间需要进行共享访问位置信息等协作操作时,通过建立数据同步协议来实现进程间的数据访问信息共享。由于对数据对象的操作方式多种多样,无法形成统一规范,所以数据同步协议也随需求不同而不同,造成依赖进程间通讯成本较高。
[0004]
需要说明的是,在上述背景技术部分公开的信息仅用于加强对本公开的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。


技术实现要素:

[0005]
本公开实施例提供一种进程间资源共享方法、装置与电子设备,用于至少在一定程度上克服由于相关技术的限制和缺陷而导致的依赖进程访问同一数据对象时沟通成本高、协作效率低的问题。
[0006]
根据本公开实施例的第一方面,提供一种进程间资源共享方法,包括:当前进程响应数据访问请求确定待访问的数据对象;所述当前进程对系统服务进程发送基于所述数据对象的第一访问入口分享请求,以便于所述系统服务进程将所述第一访问入口分享请求分发至其管理的至少一个在先进程;所述当前进程根据所述至少一个在先进程返回的至少一个分享型访问入口中的第一分享型访问入口获取所述数据对象的数据访问句柄,所述第一分享型访问入口包括所述数据访问句柄和第一协同工作信息;所述当前进程根据所述第一协同工作信息使用所述数据访问句柄访问所述数据对象。
[0007]
在本公开的一种示例性实施例中,还包括:
[0008]
所述当前进程如果在预设时间内没有收到所述至少一个分享型访问入口,则获取所述数据对象的访问入口,进而通过所述访问入口获取所述数据对象的数据访问句柄,使用所述数据访问句柄访问所述数据对象。
[0009]
在本公开的一种示例性实施例中,还包括:
[0010]
所述当前进程响应来自在后进程的第二访问入口分享请求,确定发送给所述在后进程的第二协同工作信息;所述当前进程按预设方式封装所述数据访问句柄和所述第二协同工作信息以形成第二分享型访问入口;所述当前进程对所述在后进程传递所述第二分享型访问入口,以便于所述在后进程通过所述第二分享型访问入口使用所述数据访问句柄访问所述数据对象。
[0011]
在本公开的一种示例性实施例中,还包括:
[0012]
所述当前进程响应来自在后进程的第二访问入口分享请求,确定发送给所述在后进程的第二协同工作信息;所述当前进程按预设方式封装所述数据访问句柄、所述第二协同工作信息和所述当前进程的通讯接口以形成第三分享型访问入口;所述当前进程对所述在后进程传递所述所述分享型访问接口后,响应所述在后进程根据所述通讯接口发送的连接建立请求,建立连接所述在后进程的通讯通道;所述当前进程通过所述通讯通道获取所述在后进程的第三协同工作信息;所述当前进程根据所述第三协同工作信息,使用所述数据访问句柄访问所述数据对象。
[0013]
在本公开的一种示例性实施例中,所述确定发送给所述在后进程的第二协同工作信息包括:所述当前进程判断所述当前进程是否是任务管理进程;在所述当前进程是任务管理进程时,所述当前进程通过已建立的所述通讯通道获取至少一个在后进程的协同工作信息,形成包括所述当前进程的协同工作信息在内的所述第二协同工作信息。
[0014]
在本公开的一种示例性实施例中,还包括:
[0015]
所述协同工作信息包括访问位置信息,所述在后进程通过所述第二协同工作信息获取正在访问所述数据对象的多个进程的访问位置信息,根据所述多个进程的访问位置信息确认所述在后进程的访问位置,所述访问位置信息包括进程在当前任务的访问行数信息和访问列数信息。
[0016]
在本公开的一种示例性实施例中,所述当前进程根据所述第一协同工作信息使用所述数据访问句柄访问所述数据对象包括:
[0017]
所述当前进程向系统申请所述数据访问句柄的使用权限;
[0018]
如果所述数据访问句柄是占用状态,所述当前进程等待系统分配所述数据访问句柄的使用权限;
[0019]
如果所述数据访问句柄不是占用状态,所述当前进程获得所述数据访问句柄的使用权限并通过所述数据访问句柄访问所述数据对象,所述数据访问句柄被系统设置为占用状态。
[0020]
在本公开的一种示例性实施例中,所述当前进程按预设方式封装所述数据访问句柄和所述第二协同工作信息以形成第二分享型访问入口包括:所述当前进程基于预设类封装所述数据访问句柄和所述第二协同工作信息以形成所述第二分享型访问入口。
[0021]
根据本公开实施例的第二方面,提供一种进程间资源共享装置,包括:数据对象确认模块,设置为当前进程响应数据访问请求确定待访问的数据对象;请求分享模块,设置为所述当前进程对系统服务进程发送基于所述数据对象的第一访问入口分享请求,以便于所述系统服务进程将所述第一访问入口分享请求分发至其管理的至少一个在先进程;数据访问句柄获取模块,设置为所述当前进程根据所述至少一个在先进程返回的至少一个分享型
访问入口中的第一分享型访问入口获取所述数据对象的数据访问句柄,所述第一分享型访问入口包括所述数据访问句柄和第一协同工作信息;数据访问模块,设置为所述当前进程根据所述第一协同工作信息使用所述数据访问句柄访问所述数据对象。
[0022]
根据本公开的第三方面,提供一种进程间资源共享装置,包括:存储器;以及耦合到所属存储器的处理器,所述处理器被配置为基于存储在所述存储器中的指令,执行如上述任意一项所述的方法。
[0023]
根据本公开的第四方面,提供一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时实现如上述任意一项所述的进程间资源共享方法。
[0024]
本公开实施例通过使用分享型访问入口一次性将协同工作信息和数据访问句柄发送给依赖进程,可以使依赖进程同时获得数据访问句柄和协同工作信息,避免多个依赖进程对同一数据的访问依赖于复杂的数据同步协议、避免多个依赖进程各自申请数据访问句柄,可以有效提高多个依赖进程对同一数据对象的访问效率,不受限于数据同步协议,适用于更广泛的应用场景。
[0025]
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
[0026]
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0027]
图1是本公开示例性实施例中进程间资源共享方法的流程图。
[0028]
图2是本公开一个实施例中分享型访问入口的建立流程示意图。
[0029]
图3是本公开再一个实施例中分享型访问入口的建立流程示意图。
[0030]
图4是本公开再一个实施例中分享型访问入口的建立流程示意图。
[0031]
图5是本公开实施例中当前进程响应数据访问请求的流程图。
[0032]
图6是本公开实施例中当前进程响应第二访问入口分享请求的流程图。
[0033]
图7是本公开一个实施例中进程之间的交互过程示意图。
[0034]
图8是本公开实施例一个应用场景的示意图。
[0035]
图9是本公开一个实施例中一种进程间资源共享装置的方框图。
[0036]
图10是本公开一个实施例中一种电子设备的方框图。
具体实施方式
[0037]
现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本公开将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施方式中。在下面的描述中,提供许多具体细节从而给出对本公开的实施方式的充分理解。然而,本领域技术人员将意识到,可以实践本公开的技术方案而省略所述特定细节中的一个或更多,或者可以采用其它的方
法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知技术方案以避免喧宾夺主而使得本公开的各方面变得模糊。
[0038]
此外,附图仅为本公开的示意性图解,图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。附图中所示的一些方框图是功能实体,不一定必须与物理或逻辑上独立的实体相对应。可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或进程电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
[0039]
下面结合附图对本公开示例实施方式进行详细说明。
[0040]
图1示意性示出本公开示例性实施例中进程间资源共享方法的流程图。参考图1,进程间资源共享方法100可以包括:
[0041]
步骤s11,当前进程响应数据访问请求确定待访问的数据对象;
[0042]
步骤s12,所述当前进程对系统服务进程发送基于所述数据对象的第一访问入口分享请求,以便于所述系统服务进程将所述第一访问入口分享请求分发至其管理的至少一个在先进程;
[0043]
步骤s13,所述当前进程根据所述至少一个在先进程返回的至少一个分享型访问入口中的第一分享型访问入口获取所述数据对象的数据访问句柄,所述第一分享型访问入口包括所述数据访问句柄和第一协同工作信息;
[0044]
步骤s14,所述当前进程根据所述第一协同工作信息使用所述数据访问句柄访问所述数据对象。
[0045]
本公开实施例通过使用分享型访问入口一次性将协同工作信息和数据访问句柄发送给依赖进程,可以使依赖进程同时获得数据访问句柄和协同工作信息,避免多个依赖进程对同一数据的访问依赖于复杂的数据同步协议、避免多个依赖进程各自申请数据访问句柄,可以有效提高多个依赖进程对同一数据对象的访问效率,不受限于数据同步协议,适用于更广泛的应用场景。
[0046]
本公开实施例可以应用于android系统。
[0047]
下面,对进程间资源共享方法100的各步骤进行详细说明。
[0048]
在步骤s11,当前进程响应数据访问请求确定待访问的数据对象。
[0049]
在本公开的一些实施例中,待访问的数据对象例如可以为通讯录等具有多种数据类型的数据的数据集合。例如,在对通讯录中的每个联系人的头像或者皮肤等进行图像批量处理的任务中,由于针对图像的处理会带来很大的资源消耗,为了避免使应用产生oom(out of memory,内存耗尽),可以将图像批量处理任务分配到多个进程中,对每个进程生成一个针对该通讯录的数据访问请求,由于这些进程执行的是一个图像批量处理任务的不同子任务,这些进程可以被相互称为依赖进程。
[0050]
在步骤s12,所述当前进程对系统服务进程发送基于所述数据对象的第一访问入口分享请求,以便于所述系统服务进程将所述第一访问入口分享请求分发至其管理的至少一个在先进程。
[0051]
android系统的系统服务进程负责广播信息的调度,因此,当前进程将访问入口分享请求发送给系统服务进程后,系统服务进程可以将该访问入口分享请求以广播方式分发给其管理的所有进程。
[0052]
在步骤s13,所述当前进程根据所述至少一个在先进程返回的至少一个分享型访问入口中的第一分享型访问入口获取所述数据对象的数据访问句柄,所述第一分享型访问入口包括所述数据访问句柄和第一协同工作信息。
[0053]
在一个实施例中,正在访问该数据对象的至少一个进程作为当前进程的在先进程,响应该访问入口分享请求对当前进程返回一个分享型访问入口(分享型访问入口的建立过程详见图2所示实施例的相关描述)。
[0054]
本公开实施例中,分享型访问入口是一个可以通过ipc(interprosses communication,进程间通信)方式在进程之间传递的数据包,这个数据包的内容包括数据对象的数据访问句柄和进程间的协同工作信息,协同工作信息的内容可以包括进程访问位置信息、进程对数据的访问顺序信息等多种信息。
[0055]
在一些实施例中,分享型访问入口还可以包括在先进程的通讯接口,当前进程可以根据该通讯接口与该在先进程建立通讯通道,并在后续工作中通过该通讯通道与该在先进程相互传送协同工作信息。
[0056]
在先进程使用分享型访问入口对当前进程传送协同工作信息可以有效避免建立多种数据协同协议带来的繁琐步骤和适用范围受限问题,可以有效提高依赖进程间的协同工作效率;而在先进程将数据访问句柄与协同工作信息一同打包发送给当前进程,使当前进程无需独立申请访问入口即可获得数据访问句柄,可以极大提高多个依赖进程对同一数据对象的访问效率。此外,数据访问句柄的分享可以使依赖进程之间共享某些私有数据的访问权限,避免各进程独自申请访问入口可能带来的访问受限问题,提高依赖进程之间的信息共享程度和协同程度。
[0057]
在一些情况下,接收到广播的多个在先进程同时对当前进程返回多个分享型访问入口,此时当前进程可以按照预设规则决定使用哪个分享型访问入口。例如,可以设置到达时间最早的分享型访问入口为当前进程使用的第一分享型访问入口,或者设置预设在先进程发送的分享型访问入口为当前进程使用的第一分享型访问入口。对分享型访问入口的选择方案可以有多种,本领域技术人员可以根据实际情况自行设置。
[0058]
在本公开的另一个实施例中,如果当前进程发送第一访问入口分享请求后,在预设时间内没有接收到至少一个分享型访问入口,则可以按照正常流程获取数据对象的访问入口,进而通过该访问入口获取该数据对象的数据访问句柄,通过该数据访问句柄访问所述数据对象。在本公开实施例中,访问入口为android系统中的cursor(游标),数据访问句柄为android系统中的cursor window(游标窗口)。在android系统中,cursor是一个封装类,封装有作为数据访问句柄的cursorwindow。进程可以通过获取cursor使用封装在cursor中的cursorwindow(数据访问句柄)对数据对象进行访问。
[0059]
按照正常流程获取cursor的方式例如为通过contentprovier(内容提供者)的query(询问)方法申请一个数据对象的cursor,其中contentprovider是android系统的四大组件之一,为存储和读取数据提供统一的接口。由于获取数据对象的访问入口的具体步骤与相关技术相同,本公开于此不再赘述。
[0060]
在步骤s14,所述当前进程根据所述第一协同工作信息使用所述数据访问句柄访问所述数据对象。
[0061]
第一协同工作信息例如为在先进程发给当前进程的在先进程的访问位置信息,当
前进程可以根据该访问位置信息确定当前进程的访问位置,进而访问该数据对象。此外,协同工作信息还可以包括数据访问方案、任务设置信息等多种信息,本公开对此不作特殊限制。
[0062]
在第一分享型访问入口包括在先进程的通讯接口时,当前进程可以根据该通讯接口与在先进程建立通讯通道(在一实施例中例如为android系统中的ibinder),进而与该在先进程多次沟通协同工作信息,及时根据最新的协同工作信息调整对数据对象的访问方式。
[0063]
由于当前进程与在先进程共同使用同一个数据访问句柄访问同一个数据对象,在本公开实施例中,可以通过系统互斥锁机制来实现多个进程对一个数据访问句柄的使用。
[0064]
即,当前进程通过分享型访问入口获取到该数据访问句柄的访问权限后,在需要访问该数据对象时,可以首先向系统申请该数据访问句柄的使用权限,如果该数据访问句柄是占用状态,则当前进程等待被系统分配该数据访问句柄的使用权限;如果数据访问句柄不是占用状态,当前进程可以获得该数据访问句柄的使用权限并通过该数据访问句柄访问数据对象,此时该数据访问句柄被系统设置为占用状态。
[0065]
互斥锁机制的设置可以允许多个依赖进程共同使用一个数据访问句柄访问同一个数据对象,避免多个依赖进程各自申请访问入口带来的繁琐流程,有效提高多个依赖进程对同一数据对象的访问效率。系统对多个进程分配数据访问句柄的使用权限的方案可以有多种,例如根据进程申请访问时间的先后或进程的优先级来分配数据访问句柄的使用权限等,本公开对此不作特殊限制。
[0066]
图2是本公开一个实施例中分享型访问入口的建立流程示意图。
[0067]
参考图2,在一个实施例中,分享型访问入口的建立过程200可以包括:
[0068]
步骤s21,所述当前进程响应来自在后进程的第二访问入口分享请求,确定发送给所述在后进程的第二协同工作信息;
[0069]
步骤s22,所述当前进程按预设方式封装所述数据访问句柄和所述第二协同工作信息以形成第二分享型访问入口;
[0070]
步骤s23,所述当前进程对所述在后进程传递所述第二分享型访问入口,以便于所述在后进程通过所述第二分享型访问入口使用所述数据访问句柄访问所述数据对象。
[0071]
在本公开实施例中,按预设方式封装数据访问句柄和第二协同工作信息例如为基于预设类封装数据访问句柄和第二协同工作信息,从而生成继承自该预设类的第二分享型访问入口,该预设类例如为parcelable类。
[0072]
parcelable类是android系统中用于实现进程间操作的序列化接口类,只有继承自parcelable类的数据结构才能实现序列化并通过ipc(inter-process communication,进程间通信)方式在进程间进行传递。因此在图2所示实施例中,当前进程可以在接收到在后进程通过广播发送的第二访问入口分享请求时,对已获得的数据访问句柄(cursor window)和针对该在后进程生成的第二协同工作信息进行打包并序列化(封装为parcelable类),生成一个继承自parcelable类的第二分享型访问入口,以同时实现数据访问句柄和协同工作信息在进程间的传递。其中,数据访问句柄既可以是通过申请访问入口(cursor)获得的,也可以是通过在先进程提供的第一分享型访问入口获得的。
[0073]
在本公开实施例中,当前进程对在后进程传递第二分享型访问入口后,与接收到
第二分享型访问入口的在后进程共同使用该数据对象的数据访问句柄访问同一个数据对象。即,多个进程可以同时使用同一个数据访问句柄来对同一数据对象进行访问。
[0074]
图3是本公开再一个实施例中分享型访问入口的建立流程示意图。
[0075]
参考图3,当分享型访问入口包括通讯接口时,分享型访问入口的建立过程300可以包括:
[0076]
步骤s31,所述当前进程响应来自在后进程的第二访问入口分享请求,确定发送给所述在后进程的第二协同工作信息;
[0077]
步骤s32,所述当前进程按预设方式封装所述数据访问句柄、所述第二协同工作信息和所述当前进程的通讯接口以形成第三分享型访问入口;
[0078]
步骤s33,所述当前进程对所述在后进程传递所述所述分享型访问接口后,响应所述在后进程根据所述通讯接口发送的连接建立请求,建立连接所述在后进程的通讯通道;
[0079]
步骤s34,所述当前进程通过所述通讯通道获取所述在后进程的第三协同工作信息;
[0080]
步骤s35,所述当前进程根据所述第三协同工作信息,使用所述数据访问句柄访问所述数据对象。
[0081]
当前进程可以将当前进程的通讯接口与数据访问句柄和需要发送给在后进程的第二协同工作信息一同封装至第三分享型访问入口中,从而与在后进程建立通讯通道,为后续的信息沟通提供便利,并在后续工作中根据相互沟通的协同工作信息调整自身的工作方案。建立通讯通道可以避免相关技术中通过多种数据同步协议实现进程间沟通的繁琐步骤,有效提高依赖进程间的沟通效率和依赖进程的工作效率。
[0082]
可以理解的是,当前进程与建立了通讯通道的在后进程之间的通讯内容可以有多种,当前进程和在后进程均可以根据该通讯内容及时调整数据访问方案,实现复杂的协同操作。
[0083]
在一些实施例中,当进程之间建立了通讯通道时,可以设置一个任务管理进程来统一安排访问同一数据对象的全部依赖进程的数据访问方案。
[0084]
图4是本公开再一个实施例中分享型访问入口的建立流程示意图。
[0085]
参考图4,在设置有任务管理进程的情况下,步骤s31可以包括:
[0086]
步骤s311,所述当前进程判断所述当前进程是否是任务管理进程;
[0087]
步骤s312,在所述当前进程是任务管理进程时,所述当前进程通过已建立的所述通讯通道获取至少一个在后进程的协同工作信息,形成包括所述当前进程的协同工作信息在内的所述第二协同工作信息。
[0088]
当前进程在接收到在后进程通过广播方式发送的第二访问入口分享请求时,可以首先判断自己是否是任务管理进程,如果是,则通过已建立的全部通讯通道获取其他依赖进程的协同工作信息。
[0089]
在一些情况下,虽然当前进程是任务管理进程,但是尚未与其他进程建立通讯通道(即该在后进程是第二个访问该数据对象的进程),此时当前进程可以在判断通讯通道的数量为零时,仅封装自身的协同工作信息、自身的通讯接口以及该数据对象的数据访问句柄,以生成发送给在后进程的第三分享型访问入口。
[0090]
在另一些情况下,通讯通道的数量不为零,当前进程可以通过通讯通道获取到其
他依赖进程的协同工作信息,此时当前进程可以根据自身协同工作信息和其他进程的协同工作信息确定需要发送给在后进程的第二协同工作信息,以生成发送给在后进程的第三分享型访问入口。
[0091]
如果当前进程判断自己不是任务管理进程,则可以不对该第二访问入口分享请求做出回应。在一些实施例中,还可以通过系统服务进程设置访问入口分享请求仅能到达任务管理进程,以便于任务管理进程实现对所有依赖进程的统一管理。
[0092]
在本公开实施例中,协同工作信息例如可以包括访问位置信息,在设置有任务管理进程时,在后进程在获得当前进程发送的第二分享型访问入口(此时当前进程是任务管理进程)或者当前进程在获得在先进程发送的第一分享型访问入口(此时在先进程是任务管理进程)时,可以通过协同工作信息获取正在访问该数据对象的全部在先进程的访问位置信息,根据这些访问位置信息确认访问位置。其中,访问位置信息可以包括进程在当前任务中的访问行数信息(row)和访问列数信息(column)。
[0093]
例如,如果当前进程从在先进程a(任务管理进程)传递的第一协同工作信息中得知在先进程a在当前任务中的访问位置是第0~999行,在先进程b在当前任务中的访问位置是第1000~1999行,又从第一协同工作信息中或当前进程的初始设置中得知自身任务是访问1000行数据,则可以确定自己对该数据对象的访问范围是第2000~2999行。
[0094]
图5是本公开实施例中当前进程响应数据访问请求的流程图。
[0095]
参考图5,在一个实施例中,当前进程响应数据访问请求的过程500可以包括:
[0096]
步骤s501,响应数据访问请求确定待访问的数据对象;
[0097]
步骤s502,对系统服务进程发送基于该数据对象的第一访问入口分享请求;
[0098]
步骤s503,判断是否接收到至少一个分享型访问入口,如果是,进入步骤s504,如果否,进入步骤s510;
[0099]
步骤s504,在至少一个分享型访问入口中确定第一分享型访问入口;
[0100]
步骤s505,获取该第一分享型访问入口的数据访问句柄、第一协同工作信息、通讯接口;
[0101]
步骤s506,根据该第一协同工作信息确定数据访问方案,根据该通讯接口建立与在先进程的通讯通道,以实时接收最新的协同工作信息;
[0102]
步骤s507,向系统申请该数据访问句柄的使用权限;
[0103]
步骤s508,判断是否获得该数据访问句柄的使用权限,如果是,进入步骤s509使用该数据访问句柄访问该数据对象,如果否,在本步骤继续等待;
[0104]
步骤s510,判断等待时间是否超过预设值,如果是,进入步骤s511,否则返回步骤s503继续等待;
[0105]
步骤s511,申请该数据对象的访问入口,进而通过该访问入口获取数据访问句柄,通过该数据访问句柄访问该数据对象。
[0106]
图6是本公开实施例中当前进程响应第二访问入口分享请求的流程图。
[0107]
参考图6,在一个实施例中,当前进程响应访问第二入口分享请求的过程600可以包括:
[0108]
步骤s601,接收来自在后进程的第二访问入口分享请求;
[0109]
步骤s602,判断自己是否是任务管理进程,如果是,进入步骤s603,如果否,结束响
应;
[0110]
步骤s603,判断当前已建立的通讯通道数是否为零,如果否,进入步骤s604,如果是,进入步骤s605;
[0111]
步骤s604,通过已建立的通讯通道获取多个依赖进程的协同工作信息,与自身的协同工作信息进行汇总生成第二协同工作信息;
[0112]
步骤s605,将当前进程的协同工作信息作为第二协同工作信息;
[0113]
步骤s606,基于预设类封装第二协同工作信息、当前进程的通讯接口和数据访问句柄以形成第三分享型访问入口;
[0114]
步骤s607,对该在后进程发送该第三分享型访问入口。
[0115]
图7是本公开一个实施例中进程之间的交互过程示意图。
[0116]
参考图7,在进程之间的交互过程700中,假设进程a访问一个数据对象时不存在其他正在访问该数据对象的进程(即广播后没有收到回应),则在步骤s701,进程a通过获取contentprovider、调用query方法等获得数据对象的访问入口(cursor);
[0117]
在步骤s702,进程a通过访问入口(cursor)获得数据访问句柄(cursor window);
[0118]
进程b启动后,在步骤s703通过广播方式发送访问入口分享请求,该访问入口分享请求到达进程a;
[0119]
在步骤s704,进程a对数据访问句柄(cursor window)、协同访问信息和通讯接口进行封装,生成继承自parcelable类的分享型访问入口(parcelablecursor);
[0120]
在步骤s705,进程a将该分享型访问入口(parcelablecursor)传递给进程b;
[0121]
在步骤s706,进程b根据分享型访问入口(parcelablecursor)获取数据访问句柄(cursor window);
[0122]
在步骤s707,进程a和进程b共同使用这个数据访问句柄(cursor window)来访问同一个数据对象。
[0123]
图8是本公开实施例一个应用场景的示意图。
[0124]
参考图8,在一个应用场景800中,本公开实施例可以应用于对通讯录中的每个联系人的头像或者皮肤等进行图像批量处理的任务中。
[0125]
进程a作为第一个访问通讯录81的进程,被设置为任务管理进程,并直接通过获取contentprovider、调用query方法获得访问入口(cursor)的方式获得通讯录81的数据访问句柄(cursor window),通过数据访问句柄(cursor window)访问通讯录81的第一区域811,对第一区域811中的图像进行处理。
[0126]
进程b作为第二个访问通讯录81的进程,通过广播方式发送访问入口分享请求。
[0127]
进程a在接收到该访问入口分享请求后将自身的工作区域信息、通讯接口和数据访问句柄(cursor window)一同打包并序列化以生成继承自parcelable类的分享型访问入口82(parcelablecursor)。
[0128]
进程b接收到分享型访问入口82后根据进程a的工作区域信息和进程b的初始设置确定自身的工作区域是通讯录81的第二区域812,使用数据访问句柄(cursor window)访问第二区域812,对第一区域812中的图像进行处理;同时进程b根据进程a的通讯接口建立与进程a之间的第一通讯通道83。
[0129]
进程c作为第三个访问通讯录81的进程,通过广播方式发送访问入口分享请求。
[0130]
进程a在接收到该访问入口分享请求后,通过第一通讯通道83获取进程b的工作区域信息,并将自身的工作区域信息和进程b的工作区域信息作为协同工作信息,和进程a的通讯接口、数据访问句柄(cursor window)一同打包并序列化以生成继承自parcelable类的分享型访问入口84。
[0131]
进程c接收到分享型访问入口84后根据协同工作信息确定自身的工作区域为通讯录81的第三区域813,使用数据访问句柄(cursor window)访问第三区域813,第三区域813中的图像进行处理;同时进程c根据进程a的通讯接口建立与进程a之间的第二通讯通道85。
[0132]
可以理解的是,图8所示仅为示例,在实际应用中,访问通讯录81的进程的数量可以更多,确定每个进程的访问区域的主体也可以是作为任务管理进程的进程a,本公开不以此为限。
[0133]
综上所述,本公开实施例中在先进程通过一次性将数据访问句柄和协同工作信息一同传递给依赖进程,可以避免访问同一数据对象的多个依赖进程各自申请数据访问入口的繁琐操作,避免该多个依赖进程间通过建立数据同步协议来实现信息沟通,有效提高了多个依赖进程的工作效率。
[0134]
对应于上述方法实施例,本公开还提供一种进程间资源共享装置,可以用于执行上述方法实施例。
[0135]
图9示意性示出本公开一个示例性实施例中一种进程间资源共享装置的方框图。
[0136]
参考图9,进程间资源共享装置900可以包括:
[0137]
数据对象确认模块91,设置为当前进程响应数据访问请求确定待访问的数据对象;
[0138]
请求分享模块92,设置为所述当前进程对系统服务进程发送基于所述数据对象的第一访问入口分享请求,以便于所述系统服务进程将所述第一访问入口分享请求分发至其管理的至少一个在先进程;
[0139]
数据访问句柄获取模块93,设置为所述当前进程根据所述至少一个在先进程返回的至少一个分享型访问入口中的第一分享型访问入口获取所述数据对象的数据访问句柄,所述第一分享型访问入口包括所述数据访问句柄和第一协同工作信息;
[0140]
数据访问模块94,设置为所述当前进程根据所述第一协同工作信息使用所述数据访问句柄访问所述数据对象。
[0141]
在本公开的一种示例性实施例中,数据访问句柄获取模块93还设置为:
[0142]
所述当前进程如果在预设时间内没有收到所述至少一个分享型访问入口,则获取所述数据对象的访问入口,进而通过所述访问入口获取所述数据对象的数据访问句柄,使用所述数据访问句柄访问所述数据对象。
[0143]
在本公开的一种示例性实施例中,还包括分享型访问入口生成模块95,设置为:
[0144]
所述当前进程响应来自在后进程的第二访问入口分享请求,确定发送给所述在后进程的第二协同工作信息;所述当前进程按预设方式封装所述数据访问句柄和所述第二协同工作信息以形成第二分享型访问入口;所述当前进程对所述在后进程传递所述第二分享型访问入口,以便于所述在后进程通过所述第二分享型访问入口使用所述数据访问句柄访问所述数据对象。
[0145]
在本公开的一种示例性实施例中,还包括分享型访问入口生成模块95,设置为:
[0146]
所述当前进程响应来自在后进程的第二访问入口分享请求,确定发送给所述在后进程的第二协同工作信息;所述当前进程按预设方式封装所述数据访问句柄、所述第二协同工作信息和所述当前进程的通讯接口以形成第三分享型访问入口;所述当前进程对所述在后进程传递所述所述分享型访问接口后,响应所述在后进程根据所述通讯接口发送的连接建立请求,建立连接所述在后进程的通讯通道;所述当前进程通过所述通讯通道获取所述在后进程的第三协同工作信息;所述当前进程根据所述第三协同工作信息,使用所述数据访问句柄访问所述数据对象。
[0147]
在本公开的一种示例性实施例中,分享型访问入口生成模块95还设置为:所述当前进程判断所述当前进程是否是任务管理进程;在所述当前进程是任务管理进程时,所述当前进程通过已建立的所述通讯通道获取至少一个在后进程的协同工作信息,形成包括所述当前进程的协同工作信息在内的所述第二协同工作信息。
[0148]
在本公开的一种示例性实施例中,所述协同工作信息包括访问位置信息,所述在后进程通过所述第二协同工作信息获取正在访问所述数据对象的多个进程的访问位置信息,根据所述多个进程的访问位置信息确认所述在后进程的访问位置,所述访问位置信息包括进程在当前任务的访问行数信息和访问列数信息。
[0149]
在本公开的一种示例性实施例中,数据访问模块94设置为:
[0150]
所述当前进程向系统申请所述数据访问句柄的使用权限;
[0151]
如果所述数据访问句柄是占用状态,所述当前进程等待系统分配所述数据访问句柄的使用权限;
[0152]
如果所述数据访问句柄不是占用状态,所述当前进程获得所述数据访问句柄的使用权限并通过所述数据访问句柄访问所述数据对象,所述数据访问句柄被系统设置为占用状态。
[0153]
在本公开的一种示例性实施例中,分享型访问入口生成模块95设置为:所述当前进程基于预设类封装所述数据访问句柄和所述第二协同工作信息以形成所述第二分享型访问入口。
[0154]
由于装置900的各功能已在其对应的方法实施例中予以详细说明,本公开于此不再赘述。
[0155]
应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
[0156]
在本公开的示例性实施例中,还提供了一种能够实现上述方法的电子设备。
[0157]
所属技术领域的技术人员能够理解,本发明的各个方面可以实现为系统、方法或程序产品。因此,本发明的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。
[0158]
下面参照图10来描述根据本发明的这种实施方式的电子设备1000。图10显示的电子设备1000仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
[0159]
如图10所示,电子设备1000以通用计算设备的形式表现。电子设备1000的组件可
以包括但不限于:上述至少一个处理单元1010、上述至少一个存储单元1020、连接不同系统组件(包括存储单元1020和处理单元1010)的总线1030。
[0160]
其中,所述存储单元存储有程序代码,所述程序代码可以被所述处理单元1010执行,使得所述处理单元1010执行本说明书上述“示例性方法”部分中描述的根据本发明各种示例性实施方式的步骤。例如,所述处理单元1010可以执行如图1中所示的步骤s10:当前进程响应数据访问请求确定待访问的数据对象;步骤s12:所述当前进程对系统服务进程发送基于所述数据对象的第一访问入口分享请求,以便于所述系统服务进程将所述第一访问入口分享请求分发至其管理的至少一个在先进程;步骤s13:所述当前进程根据所述至少一个在先进程返回的至少一个分享型访问入口中的第一分享型访问入口获取所述数据对象的数据访问句柄,所述第一分享型访问入口包括所述数据访问句柄和第一协同工作信息;步骤s14:所述当前进程根据所述第一协同工作信息使用所述数据访问句柄访问所述数据对象。
[0161]
存储单元1020可以包括易失性存储单元形式的可读介质,例如随机存取存储单元(ram)10201和/或高速缓存存储单元10202,还可以进一步包括只读存储单元(rom)10203。
[0162]
存储单元1020还可以包括具有一组(至少一个)程序模块10205的程序/实用工具10204,这样的程序模块10205包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
[0163]
总线1030可以为表示几类总线结构中的一种或多种,包括存储单元总线或者存储单元控制器、外围总线、图形加速端口、处理单元或者使用多种总线结构中的任意总线结构的局域总线。
[0164]
电子设备1000也可以与一个或多个外部设备1100(例如键盘、指向设备、蓝牙设备等)通信,还可与一个或者多个使得用户能与该电子设备1000交互的设备通信,和/或与使得该电子设备1000能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(i/o)接口1050进行。并且,电子设备1000还可以通过网络适配器1060与一个或者多个网络(例如局域网(lan),广域网(wan)和/或公共网络,例如因特网)通信。如图所示,网络适配器1060通过总线1030与电子设备1000的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备1000使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、raid系统、磁带驱动器以及数据备份存储系统等。
[0165]
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本公开实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是cd-rom,u盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、终端装置、或者网络设备等)执行根据本公开实施方式的方法。
[0166]
在本公开的示例性实施例中,还提供了一种计算机可读存储介质,其上存储有能够实现本说明书上述方法的程序产品。在一些可能的实施方式中,本发明的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当所述程序产品在终端设备上运行时,所述程序代码用于使所述终端设备执行本说明书上述“示例性方法”部分中描述的根据本发
明各种示例性实施方式的步骤。
[0167]
程序产品可以采用便携式紧凑盘只读存储器(cd-rom)并包括程序代码,并可以在终端设备,例如个人电脑上运行。然而,本发明的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
[0168]
所述程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。
[0169]
计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
[0170]
可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、rf等等,或者上述的任意合适的组合。
[0171]
可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如java、c++等,还包括常规的过程式程序设计语言—诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(lan)或广域网(wan),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
[0172]
此外,上述附图仅是根据本发明示例性实施例的方法所包括的处理的示意性说明,而不是限制目的。易于理解,上述附图所示的处理并不表明或限制这些处理的时间顺序。另外,也易于理解,这些处理可以是例如在多个模块中同步或异步执行的。
[0173]
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和构思由权利要求指出。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1