Chinaunix首页 | 论坛 | 博客
  • 博客访问: 8134609
  • 博文数量: 594
  • 博客积分: 13065
  • 博客等级: 上将
  • 技术积分: 10324
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-26 16:44
个人简介

推荐: blog.csdn.net/aquester https://github.com/eyjian https://www.cnblogs.com/aquester http://blog.chinaunix.net/uid/20682147.html

文章分类

全部博文(594)

分类: C/C++

2012-06-24 23:41:16

按以下思路进行设计,非最终设计图,有等进一步思考,以发现问题,需要达到以下目的:
  1. 同时支持线程和进程模式(做了抽象)
  2. Service不和线程绑定
  3. Service独占线程池或进程(进程下再划分线程池)
  4. Session和线程绑定,不跨线程
  5. Service下可以有0到多个Session
  6. 一个Session可以0到多个 子 Session,不限制层级
  7. 子Session和父Session由同一个线程调度
  8. Service的ID从0开始的无符号32位整数
  9. Session的ID从1 开始的无符号32位整数,0被Service占用,以简化程序设计(在后续会讲到原因)


在进程模型,CKernelThread和CServiceThread个数是相等的,而且线程是一对一的。CServieProcess会fork出一个进程,这个进程会创建CServicePool,CServiceThread阻塞同步的接收CProcessMessageBridge发过来的消息,然后处理,直接到处理完后CKernelThread才会去处理下一个消息。但在这过程中,CService和CSession可以输出需要发送到其它Service或节点的消息,CProcessMessageBridge会做相应的处理。

阅读(2394) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

网络传奇2012-06-26 15:08:24

博主写的不错

Aquester2012-06-25 09:39:18

这里只涉及了加载Service和消息处理,未涉及消息如何传递回去和主动发送出去。主要涉及三个流程:
1.加载Service(是一个SO,实现了IDistributedObject接口)
2.消息是如何进来的(对于线程模型,到CKernelThread打止;对于进程模型,到CServiceThread打止)
3.消息被调度处理的过程(最终由CService和CSession实体类处理,编程时需要继承这两个类,但session是可选的)