一种基于Actor模型的调度方法及装置制造方法及图纸

技术编号:13634567 阅读:52 留言:0更新日期:2016-09-02 19:38
本发明专利技术实施例公开了一种基于Actor模型的调度方法及装置,用于简化消息处理流程,提高开发效率。本发明专利技术实施例方法包括:在启动Actor时,对所述Actor的阻塞类型进行判断,其中,所述Actor的阻塞类型包括不可阻塞的Actor和可阻塞的Actor;若所述Actor为不可阻塞的Actor,则将所述Actor的消息存入第一线程池的某一IO多路复用器线程中;若所述Actor为可阻塞的Actor,则将所述Actor的消息存入第二线程池的消息队列中;其中,所有不可阻塞的Actor共享第一线程池,所述第一线程池包括预设数量的IO多路复用器线程;其中,每个可阻塞的Actor独占一个第二线程池,且每个可阻塞的Actor在对应的第二线程池中拥有独立的消息队列。

【技术实现步骤摘要】

本专利技术涉及通信领域,尤其涉及一种基于Actor模型的调度方法及装置
技术介绍
Actor模型是著名的并发计算模型,目前其已成为研制并发面向对象语言的一种重要的基础模型。Actor模型的一个基本认知是:在Actor模型中所有对象都是Actor,也就是Actor是Actor模型的原子单位,不同的Actor之间通过消息进行通讯。目前,支持Actor模型的语言和开发库主要包括Erlang、Scala、基于Scala和 Java的Akka以及基于C++11的libcaf等,它们使用不同的Actor调度机制,如Erlang基于轻量级线程与邮箱(Mailbox),Scala、Akka和libcaf则基于单一线程池与邮箱,然而,使用单一线程池与邮箱也带来一些问题:一是单一线程池机制不允许任何置于其中的Actor进行消息处理时阻塞,因为只要某一调度线程上有一个Actor处于阻塞状态,都将导致整个调度系统停滞。二是为每个Actor生成一个邮箱的消息传递机制成本偏高,因为需要为每个Actor创建一个消息队列,且需要保证其在并发操作时的安全性;而且在一些网络通信场景中,需要申请一段内存将收到的报文拷贝于要发往邮箱的消息中,增加了内存占用率。
技术实现思路
本专利技术实施例提供了一种可简化消息处理流程,提高开发效率的基于Actor模型的调度方法。本专利技术实施例的第一方面提供一种基于Actor模型的调度方法,包括:在启动Actor时,对所述Actor的阻塞类型进行判断,其中,所述Actor的阻塞类型包括不可阻塞的Actor和可阻塞的Actor;若所述Actor为不可阻塞的Actor,则将所述Actor的消息存入第一线程池的某一IO多路复用器线程中;若所述Actor为可阻塞的Actor,则将所述Actor的消息存入第二线程池的消息队列中;其中,所有不可阻塞的Actor共享第一线程池,所述第一线程池包括预设数量的IO多路复用器线程;其中,每个可阻塞的Actor独占一个第二线程池,且每个可阻塞的Actor在对应的第二线程池中拥有独立的消息队列。可选地,在所述对Actor的阻塞类型进行判断之前,所述方法还包括:在创建所述Actor时,为所述Actor分配线程标识;则所述对Actor的阻塞类型进行判断包括:若所述Actor的线程标识为第一标识,则确定所述Actor为不可阻塞的Actor,若所述Actor的线程标识为第二标识,则确定所述Actor为可阻塞的Actor。可选地,所述为所述Actor分配线程标识包括:确定所述Actor的事件类型;根据所述事件类型为所述Actor分配线程标识。可选地,所述根据所述事件类型为所述Actor分配线程标识包括:若所述Actor基于网络连接事件产生,则为所述Actor分配第一标识;若所述Actor基于同步的数据库访问事件或同步的网络RPC调用事件产生,则为所述Actor分配第二标识。可选地,所述Actor的消息由Lambda表达式描述。可选地,所述Lambda表达式由future函数传递。本专利技术实施例第二方面提供了一种基于Actor模型的调度装置,包括:判断单元,用于在启动Actor时,对所述Actor的阻塞类型进行判断,其中,所述Actor的阻塞类型包括不可阻塞的Actor和可阻塞的Actor;第一处理单元,用于若所述Actor为不可阻塞的Actor,则将所述Actor的消息存入第一线程池的某一IO多路复用器线程中;第二处理单元,用于若所述Actor为可阻塞的Actor,则将所述Actor的消息存入第二线程池的消息队列中;其中,所有不可阻塞的Actor共享第一线程池,所述第一线程池包括预设数量的IO多路复用器线程;其中,每个可阻塞的Actor独占一个第二线程池,且每个可阻塞的Actor在对应的第二线程池中拥有独立的消息队列。可选地,所述装置还包括:分配单元,用于在创建所述Actor时,为所述Actor分配线程标识;所述判断单元,具体用于若所述Actor的线程标识为第一标识,则确定所述Actor为不可阻塞的Actor,若所述Actor的线程标识为第二标识,则确定所述Actor为可阻塞的Actor。可选地,所述分配单元包括:确定模块,用于在创建所述Actor时,确定所述Actor的事件类型;分配模块,用于根据所述事件类型为所述Actor分配线程标识。可选地,所述确定模块,具体用于若所述Actor基于网络连接事件产生,则为所述Actor分配第一标识;若所述Actor基于同步的数据库访问事件或同步的网络RPC调用事件产生,则为所述Actor分配第二标识。可选地,所述Actor的消息由Lambda表达式描述。可选地,所述Lambda表达式由future函数传递。本专利技术实施例提供的技术方案中,所有不可阻塞的Actor共享第一线程池,该第一线程池包括预设数量的IO多路复用器线程;每个可阻塞的Actor独占一个第二线程池,且每个可阻塞的Actor在对应的第二线程池中拥有独立的消息队列;在启动Actor时,首先对Actor的阻塞类型进行判断,以确定该Actor是不可阻塞的Actor还是可阻塞的Actor,若该Actor为不可阻塞的Actor,则将该Actor的消息存入第一线程池的某一IO多路复用器线程中,由该IO多路复用器线程管理,若该Actor为可阻塞的Actor,则将该Actor的消息存入第二线程池的消息队列中,由第二线程池的某个线程取出并执行。因此相对于现有技术,本专利技术实施例可将Actor进行阻塞类型分类,并为不同阻塞类型的Actor分配不同性质的线程池,以便简化消息处理流程,减少代码量,进而提高开发效率。附图说明图1为本专利技术实施例中服务器的架构示意图;图2为本专利技术实施例中一种基于Actor模型的调度方法一个实施例示意图;图3为本专利技术实施例中一种基于Actor模型的调度方法另一实施例示意图;图4为IO多路复用器上的事件处理流程图;图5为Actor的future函数内部处理流程图;图6为Actor在执行并行计算时的示意图;图7为本专利技术实施例中一种基于Actor模型的调度装置一个实施例示意图;图8为本专利技术实施例中一种基于Actor模型的调度装置另一实施例示意图。具体实施方式本专利技术实施例提供了一种基于Actor模型的调度方法及装置,用于简化消息处理流程,提高开发效率,以下分别进行详细说明。下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。需要说明的是,本专利技术实施例主要应用于服务器,特别是并发实时通信服务器。请参阅图1,为本专利技术实施例中服务器的架构示意图,其中,服务器监听端口用于与客户端通信,为actor服务的线程池包括一个第一线程池和一个或多个第二线程池。下面分别对第一线程池和第二线程池进行介绍:在本实施例中,第一线程池为多个Actor服务,该多个Actor基于一个固定线程数量的该第一线程池调度。具体地,第一线程池包括多个多路复用器线程,其中多路复用器线程是指每个线程都有一个IO多路复用器,且线程通常堵塞在IO本文档来自技高网...

【技术保护点】
一种基于Actor模型的调度方法,其特征在于,包括:在启动Actor时,对所述Actor的阻塞类型进行判断,其中,所述Actor的阻塞类型包括不可阻塞的Actor和可阻塞的Actor;若所述Actor为不可阻塞的Actor,则将所述Actor的消息存入第一线程池的某一IO多路复用器线程中;若所述Actor为可阻塞的Actor,则将所述Actor的消息存入第二线程池的消息队列中;其中,所有不可阻塞的Actor共享第一线程池,所述第一线程池包括预设数量的IO多路复用器线程;其中,每个可阻塞的Actor独占一个第二线程池,且每个可阻塞的Actor在对应的第二线程池中拥有独立的消息队列。

【技术特征摘要】
1.一种基于Actor模型的调度方法,其特征在于,包括:在启动Actor时,对所述Actor的阻塞类型进行判断,其中,所述Actor的阻塞类型包括不可阻塞的Actor和可阻塞的Actor;若所述Actor为不可阻塞的Actor,则将所述Actor的消息存入第一线程池的某一IO多路复用器线程中;若所述Actor为可阻塞的Actor,则将所述Actor的消息存入第二线程池的消息队列中;其中,所有不可阻塞的Actor共享第一线程池,所述第一线程池包括预设数量的IO多路复用器线程;其中,每个可阻塞的Actor独占一个第二线程池,且每个可阻塞的Actor在对应的第二线程池中拥有独立的消息队列。2.如权利要求1所述的基于Actor模型的调度方法,其特征在于,在所述对Actor的阻塞类型进行判断之前,所述方法还包括:在创建所述Actor时,为所述Actor分配线程标识;则所述对Actor的阻塞类型进行判断包括:若所述Actor的线程标识为第一标识,则确定所述Actor为不可阻塞的Actor,若所述Actor的线程标识为第二标识,则确定所述Actor为可阻塞的Actor。3.如权利要求2所述的基于Actor模型的调度方法,其特征在于,所述为所述Actor分配线程标识包括:确定所述Actor的事件类型;根据所述事件类型为所述Actor分配线程标识。4.如权利要求3所述的基于Actor模型的调度方法,其特征在于,所述根据所述事件类型为所述Actor分配线程标识包括:若所述Actor基于网络连接事件产生,则为所述Actor分配第一标识;若所述Actor基于同步的数据库访问事件或同步的网络RPC调用事件产生,则为所述Actor分配第二标识。5.如权利要求1至4中任意一项所述的基于Actor模型的调度方法,其特征在于,所述Actor的消息由Lambda表达式描述。6.如权利要求5所述的基于Actor模型的调度方法,其特征在于,所述Lambda表达式由future函数传递。7.一...

【专利技术属性】
技术研发人员:许泽文孟祥梯袁振华万留美穆良源
申请(专利权)人:深圳益邦阳光有限公司
类型:发明
国别省市:广东;44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1