gorden曹的地盘

 

2011年8月21日

现实中的多线程

摘要: 工作线程编程threads的时候,最基本的原则是从线程本地(thread-local)状态中分离出共享状态.共享状态需要同步,本地状态不需要.这也是为什么我放弃了OO的active object设计模式——java Thread对象是其中值得一提的典型实现. active object因为将共享状态和本地状态混合而臭名昭著.因为dispatcher是在我领悟到这一点之前写的,所以它使用了我们的active object库.不能再犯这个错误了!下面是整个程序怎么工作的:main thread产生一个worker thread,传递给它一个函数和一些数据.新创建的worker thread向函数传 阅读全文

posted @ 2011-08-21 09:54 Raffaele曹 阅读(512) 评论(0) 推荐(0) 编辑

2011年8月5日

现实中的多线程(一)

摘要: 理论如何转化为实践?在我其他的blog里我讨论了各种方式来实现并发,其中就包括基于所有权的类型系统.现在我面临一项任务:将这些方法应用到现实的软件产品Code Co-op中.客户要求添加更多的并发性,从而使Code Co-op的dispatcher(分发器)部分响应更迅速.因为使用的语言是C++(译者注:就是说没有”基于所有权的类型系统”),所以实现的时候需要遵守严格的纪律而不能依赖类型系统.如果可能,我还是喜欢用消息传递技术(message passing),但是,由于性能的原因,我发现自己经常被迫使用锁来操作共享状态(shared state). 我将在下面讨论message passin 阅读全文

posted @ 2011-08-05 00:34 Raffaele曹 阅读(422) 评论(0) 推荐(0) 编辑

2011年7月30日

C++ 原子操作和内存模型

摘要: 最近有一个困扰我的问题:如何使C++的原子变量高效而且可移植? 我知道Java volatile是怎么工作的——它强制实行顺序一致性(sequential consistency),但是这个方法并不总是效率最高的。 C++0x原子变量在默认模式下也一样强制实施顺序一致性。如果没有特别的顺序注记(annotation),它们和Java volatile几乎一模一样(有趣的是,Java的volatile并不强制原子性——尽管有个atomic library来实现这一点)。 但是C++可以在不同程度上放松顺序一致性的限制,如果使用得当的话,将会产生效率更高的代码。 在学习了一些x86的内存模型的知识 阅读全文

posted @ 2011-07-30 22:21 Raffaele曹 阅读(3068) 评论(2) 推荐(0) 编辑

导航