X-Matrix

MMORPG无缝服务器设计

线程模型:将任务与执行分离

ACE,Python和Java(我所知道的)中要获得多线程的能力,都是通过从一个线程对象基类继承,重载特定的成员函数来实现。简单的来看,它用起 来也相当简单,理解起来也不复杂,但,用过一段时间之后,就会发现处理复杂问题时,你会遇到许多的限制。 1.必须从一个线程对象基类继承吗? 现在看来是的,否则,你只有使用系统OS提供的线程函数了。 2.我已经有个类了,它不是从线程对象基类继承的,我要使用多继承吗? 是的,除非重写。 3.我有一个函数,想让他在另一个线程执行,一定要写个类吗? 是的。 4.我有一个类,它的每个成员函数我都想他们在另外的线程中执行,怎么办? 线程对象基类只有一个线程函数,你必须通过某种通讯机制去让它执行不同的成员函数。 4.当线程在执行一个对象的某个成员时,这个对象被删除了怎么办? 没办法,你必须自己管理对象的生存期。 呜呼!问题越来越多,该怎么办?我们需要某种透明的线程模型,他能处理任意的需要被异步执行的类的成员函数或者普通函数,它能提供一种策略,使得我们能 自动管理处理不同线程中的对象的生存期。我们现在有了这种工具了吗? 熟悉Boost的人可能觉得boost.thread也许提供了这种能力。很不幸,它满足了一部分上述需求。 正在实现上述需求的一个线程模型。它将任务与任务的执行者分离,它支持人任何的任务,不论它是普通的函数,还是具有任意参数的成员函数,你均能将它作为 一个任务抛到其他的线程执行,它是非侵入式,通过它所支持的生命期管理,你不用在担心对象在异步执行时被销毁。它用模板实现。

posted on 2008-08-23 22:25 x-matrix 阅读(1670) 评论(14)  编辑 收藏 引用

评论

# re: 线程模型:将任务与执行分离[未登录] 2008-08-24 10:18 Kevin Lynx

通过functor,可以做到将成员函数,C式函数,operator(),等绑定为线程函数.
我觉得这种方式起码比继承重写某个虚函数来得灵活.
  回复  更多评论   

# re: 线程模型:将任务与执行分离 2008-08-24 15:17 戴尔笔记本

我也是为获得多线程的能力,通过从一个线程对象基类继承,重载特定的成员函数来实现。也许还有更好的方法。  回复  更多评论   

# re: 线程模型:将任务与执行分离 2008-08-24 23:28 x-matrix

@戴尔笔记本
这种方式是需要改变了.  回复  更多评论   

# re: 线程模型:将任务与执行分离 2008-08-25 10:02 bugs_killer

有点吹毛求疵了.  回复  更多评论   

# re: 线程模型:将任务与执行分离 2008-08-25 11:06 x-matrix

@bugs_killer
我不这样认为。
  回复  更多评论   

# re: 线程模型:将任务与执行分离[未登录] 2008-08-25 14:25 陈梓瀚(vczh)

我认为这是Aspect-Oriented Programming处理的问题,不是OO处理的问题。想坚持用OO的办法,意味着重构。于是你上述的问题也就荡然无存了,因为重新设计的必然可以满足要求。  回复  更多评论   

# re: 线程模型:将任务与执行分离 2008-08-25 14:45 x-matrix

@ 陈梓瀚
不论是面向对象,还是面向方面,都要减少重构。良好的设计会尽可能减少这种需要,即使重构,也要尽量减少原有代码的修改。
这个问题是面向对象还是面向方面,值得考虑。  回复  更多评论   

# re: 线程模型:将任务与执行分离[未登录] 2008-08-25 17:05 陈梓瀚(vczh)

如果是由于架构的原因导致需求不被满足的话,就不能执着于减少修改了。  回复  更多评论   

# re: 线程模型:将任务与执行分离[未登录] 2008-08-26 15:04 hdqqq

其实不一定要过度追求线程实现,一般的实现方式是启动几个线程提供对外服务,有任务提交后,分配运行。这样可伸缩性也比较强。  回复  更多评论   

# re: 线程模型:将任务与执行分离 2008-08-26 15:13 x-matrix

@hdqqq
任务是什么呢?函数?类成员函数?函数对象?函数/成员函数声明是什么样的?一定要满足某种声明形式吗?我已有代码不满足怎么办?这些都是要解决的问题。
  回复  更多评论   

# re: 线程模型:将任务与执行分离[未登录] 2008-08-26 16:12 hdqqq

任务只是抽象意义上的需要运行的代码,函数和成员函数只是对于人来说的,对于机器来说,都是一样的,至于已有函数满不满足接口我想是架构需要考虑的问题,其实一旦代码编译好了,其调用方式就定了,如果非要满足所有的调用方式,可能rpc或者com的方式更适合一些。
我以前写的关于 函数和线程方面调用的文章。

http://blog.csdn.net/hdqqq/archive/2005/06/29/407674.aspx  回复  更多评论   

# re: 线程模型:将任务与执行分离 2008-08-26 16:37 x-matrix

@hdqqq
我觉得解决这个问题非模板莫属,其他的方式无一例外都需要用户添加一堆对用户来说根本没任何作用的代码。看看com,里面一堆的古怪的符号,光名字,已经让人恶心。  回复  更多评论   

# re: 线程模型:将任务与执行分离 2008-08-31 13:09 hsen

好像你要讲的就是boost::thread,我没猜错吧?
  回复  更多评论   

# re: 线程模型:将任务与执行分离 2008-09-02 10:11 x-matrix

@hsen
不是。
  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


公告

MMORPG无缝服务器论坛
Google Groups
xmatrix
Visit this group

导航

统计

留言簿(2)

随笔档案

最新评论

阅读排行榜