扫码订阅

在这里,俺不想用什么高深的技术字眼,那么就用类比法吧。

好比,某男A今天中午吃饭的时间想看NBA的直播,所以自己事先买好了蛋糕、水果、酸奶、矿泉水等等,一应俱全,放在茶几上,边看电视,边吃东西,偶尔还要给女朋友发发短信。

那么,某男A的切身体验就好比是计算机操作系统,看NBA、吃东西、给女朋友发短信,就好比这个操作系统在同一时段必须完成的几大项工作——等同于计算机中的进程。

但进程还是可以细分成具体执行单元的,也就是说,某男在某一时刻完成的某类工作还可以细分为更详细的事务。比如,看NBA的时候,他觉得声音太小,他一边看,一边拿遥控器开大音量,也就是说,他看NBA的任务划分为了两个小任务,一个是观看,一个是调节音量,在他觉得音量合适以后,他把遥控器放下了,继续观看;这个反映在计算机操作系统的任务管理里面就成了——“观看”这个是“看NBA”这个进程的主线程,“调解音量”这个是“看NBA”进程的辅助线程,当调解音量的任务达成后,“调解音量”这个辅助线程就自行退出或者被挂起休眠起来(即很长时间都不会再占用中央处理器的时间资源了)。

现在再看“吃东西”进程。有联想力的战友可能已经想到了,我们吃东西的进程也会划分为很多小线程——如,吃蛋糕线程、吃水果线程、吃酸奶线程、喝矿泉水线程。这是比较合理的划分,而且正常情况下,我们吃东西都是分开吃的,不可能一股脑所有东西全部塞到嘴里。不过万事皆有可能,如果某男A真的把所有的东西一股脑全塞进嘴里吃怎么算?没关系,只不过,没有了多个小线程,而有了一个“一口吃掉所有东西”的线程,在这种情况下,“吃东西”这个进程就不再是多线程任务了,而成了单线程任务了。那么有没有可能不要线程就把东西吃掉了呢?这个当然不可能,你不把东西塞进嘴里怎么吃?只要你把东西塞进嘴里,这就是执行了线程任务了。

不过,“一口吃掉所有东西”实在太辛苦了,浪费资源不说,人还不舒服,所以如果东西很多的时候,正常情况下,我们就应该把工作细分为吃蛋糕线程、吃水果线程、吃酸奶线程、喝矿泉水线程,而且这个吃的过程还有讲究——如果你是一股脑先干掉大蛋糕、然后再吃掉一斤水果,再喝一公升酸奶,最后再喝矿泉水一瓶,撑也撑死了,而且无法全然享受到所有的美味。正确的做法应该是,先吃一点蛋糕,再吃一根香蕉,喝100ml酸奶,然后再吃点蛋糕,这次水果就吃点葡萄,等等。也就是说,最好的方法就是,每种线程都执行一会,平均地分配时间,能够很好的搭配营养和口味;计算机操作系统XP也是这么工作的,它不会一个线程执行结束了再执行下一个,它会一个执行了一会就先挂起来,然后换下一个执行,这么循环不断。

那,现在又要讲到所谓“多窗口”和“多线程”的区别了。比方说,蛋糕太大了,把蛋糕分为8等分,这就好比吃东西这个进程因为吃蛋糕打开了八个窗口;但目前吃蛋糕的线程还只有一个,那么我一次拿起一块吃,依次吃完,这是一种方法——由于划分了8块,也确实避免了蛋糕上的奶油涂到脸上。还有一种方法,我多加一个线程,左右手分别拿一块蛋糕,左一口右一口把蛋糕吃完,然后继续拿蛋糕这么左右开弓,这样也行,还算合理。第三种方法,我多加7个线程,也就是说总共有8个吃蛋糕线程,那么我就必须左右手拿蛋糕各吃一口,然后放下,换上别的蛋糕,各咬一口,再放下,再换新的蛋糕... ...吃个蛋糕,拿起放下,反反复复,这么忙乎,太不值了。这一段的意思就是,吃蛋糕切几块,和我们采取什么顺序吃没什么关系,也就是说多窗口和多线程是八杆子打不着的两码事。

现在,我们最终就要面对万邦来朝的言论了。

1、他一开始是宣称自己的程序是没有线程的,好比宣称自己没张口就把所有的蛋糕、酸奶、水果、矿泉水一股脑全吃了一样。

2、他后来改口了,说自己的程序只用单线程就行了,不用多线程;这就好比看NBA时,把画面关掉了调解音量一样可笑;也好比吃东西海吃胡塞,一张嘴就把蛋糕、水果、酸奶、水全塞进嘴里一样可笑。

3、他再次狡辩说,自己单线程就能实现多窗口,能够完成多线程的任务。呵呵,假设蛋糕上奶油好吃,难道说,把蛋糕切了8块,他就能捡着自己喜欢的奶油先吃么?他还不得先吃一块,再吃一块,...他只能一次拿一块,不像多任务时,一次拿多块。

大家明白了吗?

本文内容为我个人原创作品,申请原创加分

[ 转自铁血社区 http://bbs.tiexue.net/ ]
发表评论
发表评论

网友评论仅供其表达个人看法,并不表明铁血立场。

全部评论
加载更多评论
更多精彩内容
热门推荐