Thread是一根琴弦

来源:互联网 发布:达芬奇调色 mac 破解 编辑:程序博客网 时间:2024/04/27 16:13
同事说omni_thread为什么要搞得那么复杂呢?对了,先问一下,你有没有用过这个类?其实,这就是一个对系统线程对象Thread的抽象,以使应用程序可以在不同平台上方便移植,而不论底层具体的线程模型。

起初,这个世界是没有Thread这个概念的,只有Process。我们知道,当初操作系统就是用Process来抽象计算任务的,并负责对Process进行调度。对于单CPU系统,一个时间里只有一个Process能占有CPU而得以执行。后来,不知道从什么时候开始,人们发明了Thread这个概念,Thread就是表示CPU的调度。两者的区别就是,Process是一个实体,包括了具体的代码,而Thread表示的是CPU的调度。

我们知道,代码即使装载进了内存里,而没有被CPU执行也是没有任何意义的。而CPU怎样才能执行代码呢?是的,你必须把下一句执行指令的代码指向你的代码。那么是谁让它去呢?是操作系统。那操作系统怎么让它去呢?这里有必要先说明一下,现在的操作系统都是多任务的系统。所谓的多任务就是说,同时可以运行多个Process。它如何做到有条不紊的来回切换呢?打个比喻,CPU执行代码就像沿着一条线(Thread)移动,虽然这条线有可能弯弯曲曲绕来绕去的,但终究还是一条线.那么,运行多个Process,就要有很多条线。这就像弹中国古筝一样,只是这里你就是操作系统。什么时候发什么音,要看你当时把手指放在什么弦上了。声音是因弦动而起的,而音色则由弦所处位置决定。

所以,Thread就是操作系统放在你的代码里的那个弦,代码因弦而动。操作系统的任务调度归根到底就是对Thread的调度。

好了,扯远了,再回到开头的问题。omni_thread的存在是不是就是因为不同操作系统对琴弦的操作不同啊?嗯,这就像古筝和吉他的区别,而且你能认为钢琴的琴键不是另一种弦吗?所以让程序员写跨平台的程序,就像让音乐家同时熟悉多种乐器一样困难。omni_thread就是要让所有Thread的操作在不同的操作系统上都一样。如果乐器也能有这样一个统一接口,一个人熟练掌握多种乐器就根本不是问题了。要不怎么说,开发软件是高科技呢,哈哈。

另外,Thread的操作实在是一件复杂的事情,不仅在不同平台上,就是在同一个平台上也是如此的。如何在不同的Thread之间保持同步是很复杂的--想想看,女孩子织毛衣,如何穿针是很讲究的。而CPU每秒钟运行百万行的指令,可不容你慢慢想。一不小心就会缠线,或扎到手啦。

说了那么多,根本还没有到我想要说的,很晚了,赶紧打住。我们前面说了,代码本身是死的,只有被CPU执行了才会活起来。而要被CPU执行,就要让Thread穿过。好了,现在我们都说面向对象编程,把世界都用Class来抽象,用Object来表示实体。但是说到底,Object也是代码,根本就是死的。就像木偶一样,如果没有一根Thread拴着就会耷拉下去!对于大部分的Object来说,大部分时间里它都是死的,只有Thread穿过的瞬间才会灵光一闪。那么怎样让一个Object永葆青春,光芒四射呢?答案就是,用一个Thread永远拴着它。这样它就可以在那里不停跳动,它活了!

omni_thread就是这样一个带Thread的木偶,一旦栓动就活起来了。当然,这只是一个傀儡,你需要在上面依附你的实体,也就是你的代码。现在,你看上去就像一个天使了,会煽动翅膀的天使!

其实,很多类库里都有这样的Thread封装类。比如Java里的Runnable,.NET里的Thread,MFC里的CWinThread,都是同一个东西。我个人最喜欢的就是Java里的叫法,Runnable多形象啊!

当然,我也看到很多C++的程序员根本就不用上面的什么omni_thread,而直接用pthread_create(),CreateThread()自己去引线拴木偶。虽然麻烦点,但是人家乐意嘛。

最后推荐一篇文章《白话面向智能体编程》,就是讲的如何让OOP变得更自然,那就是AOP。这里的Object变成了Agent,也就是由一个死的东西,变成了一个活物。这不由让我想起了中国古代哲学家王阳明,他好像说过这样的话,“花儿之所以存在是因为我在看它”。很唯心是不是?但是现在的OOP就是这样的,如果你不去运行它,它就真的不会动啊!Agent就不一样了,你爱看不看,我都在那里爱怎么动怎么动。文章里关于“烧鸡块”的比喻实在是精辟!虽然现在禽流感流行,不过只看看也无妨吧。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 生完孩子肚皮痒怎么办 生完小孩肚子松弛怎么办 生了孩子肚子大怎么办 嫁到别的省户口怎么办 孕中期假性宫缩怎么办 频繁的假性宫缩怎么办 显卡风扇不转了怎么办 老是想不好的事怎么办 做人工受孕多囊怎么办 子宫内有囊肿该怎么办 子宫长了个囊肿怎么办 怀孕后不想要该怎么办 20多岁雌激素低怎么办 生完小孩后子宫下垂怎么办 取环之前同房了怎么办 做人流后又怀孕怎么办 仓鼠长了个肿瘤怎么办 过敏留下的黑印怎么办 脸上痘痘发炎了怎么办 脸上皮肤红痒怎么办啊 皮肤有一片红痒怎么办 脸过敏期间很干怎么办 怀孕了用了消糜栓怎么办 乳酸杆菌少或无怎么办 怀孕了白带有异味怎么办 怀孕清洁度iv度怎么办 怀孕了下面有异味怎么办 孕妇尿白细胞1是怎么办 药流期间喂奶了怎么办 20多岁卵巢早衰怎么办 3岁儿童肚子胀气怎么办 肚子又胀又痛怎么办 1岁宝宝肚子胀气怎么办 2岁宝宝肚子胀气怎么办 产后腰粗肚子大怎么办 发烧后腹泻拉水怎么办 又吐又拉还发烧怎么办 喝中药恶心想吐怎么办 生完孩子肛门疼怎么办 拉完大便肛门痛怎么办 肚子总是凉凉的怎么办