2008年12月11日

process-->thread-->coroutine

摘要: 在现实世界中,基本是是按着这样的顺序演化:process-->thread-->coroutine/fiber其实是一个context切换开销从大到小的演化,process切换开销最大,需要切换地址空间,所有的CPU状态,所有其他资源thread切换只需要切换CPU状态,当然是大部分的CPU状态,而coroutine切换,只需要切换很少的CPU状态,而且全部都在用户地址空间运行,不需要到内核空间。当然,切换coroutine的开销还是比一次函数调用大很多,其实函数调用也是一个cpu状态的切换,不过这个状态要少得多,在x86 windows 上,甚至不必保存所有的寄存器状态(EAX/ 阅读全文

posted @ 2008-12-11 23:50 能发波 阅读(113) 评论(0) 推荐(0)

about boost::shared_ptr

摘要: boost::shared_ptr 对象中,有两个成员一个是对象 ptr,一个是引用计数类的指针,由于某种原因,我希望把 shared_ptr 放入一个指针大小的地方,却无法实现,只能用 intrusive_ptr,但是牵涉到的类又太多,改起来不现实,仔细想一下,其实 shared_ptr 完全可以只有一个指针大小,只要把对象指针放到引用计数类中就可以了,为什么shared_ptr作者不这么干?是他没想到?我觉得不太可能。或者只是为了减少一次内存访问?我觉得也不太可能。这到底有什么更深层次的原因? 阅读全文

posted @ 2008-12-11 12:59 能发波 阅读(87) 评论(0) 推荐(0)

导航