主人:fifa007
[给fifa007发送短信]


用户名:fifa007
军号:63377.tiexue
军衔:陆军上尉


金币:492枚
工分:27839
个人目录
个人首页
论坛文集 (9篇文章)
搜索文章

[原创]线程、进程与计算机工作的关系(基础教学)——无情嘲笑万邦来朝的“无线程”论 [2007-10-26 16:06:16]
发表者:fifa007 | 评论[0] | 点击[45]
在这里,俺不想用什么高深的技术字眼,那么就用类比法吧。
好比,某男A今天中午吃饭的时间想看NBA的直播,所以自己事先买好了蛋糕、水果、酸奶、矿泉水等等,一应俱全,放在茶几上,边看电视,边吃东西,偶尔还要给女朋友发发短信。
那么,某男A的切身体验就好比是计算机操作系统,看NBA、吃东西、给女朋友发短信,就好比这个操作系统在同一时段必须完成的几大项工作——等同于计算机中的进程。
但进程还是可以细分成具体执行单元的,也就是说,某男在某一时刻完成的某类工作还可以细分为更详细的事务。比如,看NBA的时候,他觉得声音太小,他一边看,一边拿遥控器开大音量,也就是说,他看NBA的任务划分为了两个小任务,一个是观看,一个是调节音量,在他觉得音量合适以后,他把遥控器放下了,继续观看;这个反映在计算机操作系统的任务管理里面就成了——“观看”这个是“看NBA”这个进程的主线程,“调解音量”这个是“看NBA”进程的辅助线程,当调解音量的任务达成后,“调解音量”这个辅助线程就自行退出或者被挂起休眠起来(即很长时间都不会再占用中央处理器的时间资源了)。
现在再看“吃东西”进程。有联想力的战友可能已经想到了,我们吃东西的进程也会划分为很多小线程——如,吃蛋糕线程、吃水果线程、吃酸奶线程、喝矿泉水线程。这是比较合理的划分,而且正常情况下,我们吃东西都是分开吃的,不可能一股脑所有东西全部塞到嘴里。不过万事皆有可能,如果某男A真的把所有的东西一股脑全塞进嘴里吃怎么算?没关系,只不过,没有了多个小线程,而有了一个“一口吃掉所有东西”的线程,在这种情况下,“吃东西”这个进程就不再是多线程任务了,而成了单线程任务了。那么有没有可能不要线程就把东西吃掉了呢?这个当然不可能,你不把东西塞进嘴里怎么吃?只要你把东西塞进嘴里,这就是执行了线程任务了。
不过,“一口吃掉所有东西”实在太辛苦了,浪费资源不说,人还不舒服,所以如果东西很多的时候,正常情况下,我们就应该把工作细分为吃蛋糕线程、吃水果线程、吃酸奶线程、喝矿泉水线程,而且这个吃的过程还有讲究——如果你是一股脑先干掉大蛋糕、然后再吃掉一斤水果,再喝一公升酸奶,最后再喝矿泉水一瓶,撑也撑死了,而且无法全然享受到所有的美味。正确的做法应该是,先吃一点蛋糕,再吃一根香蕉,喝100ml酸奶,然后再吃点蛋糕,这次水果就吃点葡萄,等等。也就是说,最好的方法就是,每种线程都执行一会,平均地分配时间,能够很好的搭配营养和口味;计算机操作系统XP也是这么工作的,它不会一个线程执行结束了再执行下一个,它会一个执行了一会就先挂起来,然后换下一个执行,这么循环不断。
那,现在又要讲到所谓“多窗口”和“多线程”的区别了。比方说,蛋糕太大了,把蛋糕分为8等分,这就好比吃东西这个进程因为吃蛋糕打开了八个窗口;但目前吃蛋糕的线程还只有一个,那么我一次拿起一块吃,依次吃完,这是一种方法——由于划分了8块,也确实避免了蛋糕上的奶油涂到脸上。还有一种方法,我多加一个线程,左右手分别拿一块蛋糕,左一口右一口把蛋糕吃完,然后继续拿蛋糕这么左右开弓,这样也行,还算合理。第三种方法,我多加7个线程,也就是说总共有8个吃蛋糕线程,那么我就必须左右手拿蛋糕各吃一口,然后放下,换上别的蛋糕,各咬一口,再放下,再换新的蛋糕... ...吃个蛋糕,拿起放下,反反复复,这么忙乎,太不值了。这一段的意思就是,吃蛋糕切几块,和我们采取什么顺序吃没什么关系,也就是说多窗口和多线程是八杆子打不着的两码事。
现在,我们最终就要面对万邦来朝的言论了。
1、他一开始是宣称自己的程序是没有线程的,好比宣称自己没张口就把所有的蛋糕、酸奶、水果、矿泉水一股脑全吃了一样。
2、他后来改口了,说自己的程序只用单线程就行了,不用多线程;这就好比看NBA时,把画面关掉了调解音量一样可笑;也好比吃东西海吃胡塞,一张嘴就把蛋糕、水果、酸奶、水全塞进嘴里一样可笑。
3、他再次狡辩说,自己单线程就能实现多窗口,能够完成多线程的任务。呵呵,假设蛋糕上奶油好吃,难道说,把蛋糕切了8块,他就能捡着自己喜欢的奶油先吃么?他还不得先吃一块,再吃一块,...他只能一次拿一块,不像多任务时,一次拿多块。
大家明白了吗?
本文内容为我个人原创作品,申请原创加分

gcshy [发送短信] 回复:[原创]线程、进程... 2007-10-26 18:33:36
#2
多窗口和多线程是八杆子打不着的两码事
自己单线程就能实现多窗口,能够完成多线程的任务
貌似明白了,就好比进程是妈,线程是儿子
只能是妈生N个儿子,绝对不能儿子生N个妈
不知道能不能这样理解
寒武纪恐龙 [发送短信] 回复:[原创]线程、进程... 2007-10-26 18:51:41
#3
楼上的也不是太准确,不过也算差不多。
总之,多个窗口与多个线程之间没有必然的联系,如果不考虑实用性,所有的东西都能单线程实现,比如关掉画面调音量。
gcshy [发送短信] 回复:[原创]线程、进程... 2007-10-26 18:59:42
#4
不是满分啊,郁闷
Uniman [发送短信] 回复:[原创]线程、进程... 2007-10-26 19:10:37
#5
 以下是引用gcshy 在第2楼的发言:
多窗口和多线程是八杆子打不着的两码事
自己单线程就能实现多窗口,能够完成多线程的任务
貌似明白了,就好比进程是妈,线程是儿子
只能是妈生N个儿子,绝对不能儿子生N个妈
不知道能不能这样理解

哈哈!有点类似啦.对于一个程序来讲进程是比较大的调度单位,而在一个程序内部都是以线程来进行调度的.多线程又涉及到一个问题.因为一个CPU同一时间实际上只能执行一个线程,如果你的CPU是双核那么要完全利用两个核心的计算能力的话必须得是多线程的程序才行.如果你运行的程序是单线程的,那么不管你的CPU是单核,双核,四核,八核,还是N核其实际执行速度跟单核是相差不多的(如果除去系统管理程序所占资源的话那基本上就完全一样了).这就是为什么双核CPU对游戏性能没有什么贡献的原因,因为游戏为了很好的控制游戏里面的时钟核快速相应玩家的操作因此是一个核心线程不停的在跑,也就是说游戏都是单线程的(至少目前如此),所以双核CPU不能提升游戏性能.
gcshy [发送短信] 回复:[原创]线程、进程... 2007-10-26 19:18:11
#6
那能不能这样理解呢,万先生的“无线论”就是没儿子论
Uniman [发送短信] 回复:[原创]线程、进程... 2007-10-26 19:28:02
#7
 以下是引用gcshy 在第6楼的发言:
那能不能这样理解呢,万先生的“无线论”就是没儿子论

哈哈!你可真幽默!
万邦来朝 [发送短信] 回复:[原创]线程、进程... 2007-10-26 20:19:05
#8
 以下是引用gcshy 在第6楼的发言:
那能不能这样理解呢,万先生的“无线论”就是没儿子论

 以下是引用Uniman 在第7楼的发言:
 以下是引用gcshy 在第6楼的发言:
那能不能这样理解呢,万先生的“无线论”就是没儿子论

哈哈!你可真幽默!

楼上各位,特别是1楼的"非法洞洞拐",你用"英编"做一个“多窗口”却不是“多线程”。"的实例出来,不你用吃东西来打比方,要有效得多!可是,你却做不出这样的实例,你只能用"打比方"的办法,在马路边,一边蹲着吃西瓜,一边吆喝,一边卖你的"洋狗皮膏药"!这就是你的多线程!哈哈!
本文内容于 2007-10-26 20:27:16 被万邦来朝编辑
fifa007 [发送短信] 回复:[原创]线程、进程... 2007-10-26 21:00:56
#9
 以下是引用万邦来朝 在第8楼的发言:
 以下是引用gcshy 在第6楼的发言:
......
哈哈!你可真幽默!

楼上各位,特别是1楼的"非法洞洞拐",你用"英编"做一个“多窗口”却不是“多线程”。"的实例出来,不你用吃东西来打比方,要有效得多!可是,你却做不出这样的实例,你只能用"打比方"的办法,在马路边,一边蹲着吃西瓜,一边吆喝,一边卖你的"洋狗皮膏药"!这就是你的多线程!哈哈!

俺的这篇入门级的文章本就是给那些虚心学习、想要掌握一些计算机概念的战友读的。
原本就没打算你能读明白,你就不要自作多情了。
Uniman [发送短信] 回复:[原创]线程、进程... 2007-10-26 22:03:08
#10
 以下是引用万邦来朝 在第8楼的发言:
 以下是引用gcshy 在第6楼的发言:
......
哈哈!你可真幽默!

楼上各位,特别是1楼的"非法洞洞拐",你用"英编"做一个“多窗口”却不是“多线程”。"的实例出来,不你用吃东西来打比方,要有效得多!可是,你却做不出这样的实例,你只能用"打比方"的办法,在马路边,一边蹲着吃西瓜,一边吆喝,一边卖你的"洋狗皮膏药"!这就是你的多线程!哈哈!


万大侠你不是我们目标读者,我们不用考虑你的感受。
万邦来朝 [发送短信] 回复:[原创]线程、进程... 2007-10-26 22:16:09
#11
 以下是引用fifa007 在第9楼的发言:
 以下是引用万邦来朝 在第8楼的发言:
 以下是引用gcshy 在第6楼的发言:
......
哈哈!你可真幽默!

楼上各位,特别是1楼的"非法洞洞拐",你用"英编"做一个“多窗口”却不是“多线程”。"的实例出来,不你用吃东西来打比方,要有效得多!可是,你却做不出这样的实例,你只能用"打比方"的办法,在马路边,一边蹲着吃西瓜,一边吆喝,一边卖你的"洋狗皮膏药"!这就是你的多线程!哈哈!

俺的这篇入门级的文章本就是给那些虚心学习、想要掌握一些计算机概念的战友读的。
原本就没打算你能读明白,你就不要自作多情了。

人家要学线程,你却跟人家讲吃西瓜.你讲完之后,果然学会了你是怎么吃西瓜的,至于线程是什么,仍然没有学会!人家还误认为是生孩子!可见你的误导,误人子弟,到了什么程度了!
万邦来朝 [发送短信] 回复:[原创]线程、进程... 2007-10-26 22:20:59
#12
 以下是引用Uniman 在第10楼的发言:
 以下是引用万邦来朝 在第8楼的发言:
 以下是引用gcshy 在第6楼的发言:
......
哈哈!你可真幽默!

楼上各位,特别是1楼的"非法洞洞拐",你用"英编"做一个“多窗口”却不是“多线程”。"的实例出来,不你用吃东西来打比方,要有效得多!可是,你却做不出这样的实例,你只能用"打比方"的办法,在马路边,一边蹲着吃西瓜,一边吆喝,一边卖你的"洋狗皮膏药"!这就是你的多线程!哈哈!


万大侠你不是我们目标读者,我们不用考虑你的感受。

副标题,不是在嘲笑吗?我进来反嘲笑你们一下,哈哈.大笑!西瓜吃进肚子去了没有?吃西瓜的时候,是把西瓜放进嘴里吃?还是不嘴,钻进西瓜去吃?不要把你们的学生,教成跟你们一样,只会蹲在马路边,乱啃哦!
inexpert [发送短信] 回复:[原创]线程、进程... 2007-10-26 22:28:57
#13
 以下是引用Uniman 在第10楼的发言:
 以下是引用万邦来朝 在第8楼的发言:
 以下是引用gcshy 在第6楼的发言:
......
哈哈!你可真幽默!

楼上各位,特别是1楼的"非法洞洞拐",你用"英编"做一个“多窗口”却不是“多线程”。"的实例出来,不你用吃东西来打比方,要有效得多!可是,你却做不出这样的实例,你只能用"打比方"的办法,在马路边,一边蹲着吃西瓜,一边吆喝,一边卖你的"洋狗皮膏药"!这就是你的多线程!哈哈!


万大侠你不是我们目标读者,我们不用考虑你的感受。

没人甩这这万大仙,它还腆着脸皮进来吠,哈哈,够jian!
本文内容于 2007-10-26 22:31:37 被inexpert编辑
万邦来朝 [发送短信] 回复:[原创]线程、进程... 2007-10-26 22:35:36
#14
 以下是引用inexpert 在第13楼的发言:
 以下是引用Uniman 在第10楼的发言:
......

万大侠你不是我们目标读者,我们不用考虑你的感受。

没人甩这这万大仙,它还腆着脸皮进来吠,哈哈,够jian!

我是来看你怎么吠的.你的牙露出来了!
linxu83 [发送短信] 回复:[原创]线程、进程... 2007-10-26 22:38:46
#15
突然明白什么叫对牛弹琴了.

楼主讲得很好,不去当老师可惜了.
wsj1723 [发送短信] 回复:[原创]线程、进程... 2007-10-26 22:59:26
#16
请大家文明发言,理性辩论,谢谢
fifa007 [发送短信] 回复:[原创]线程、进程... 2007-10-26 23:04:52
#17
 以下是引用wsj1723 在第16楼的发言:
请大家文明发言,理性辩论,谢谢

万邦想把这个帖子的水搅浑。显然他是心虚了。
linxu83 [发送短信] 回复:[原创]线程、进程... 2007-10-26 23:14:11
#18
万邦来朝,很严肃的问你,你能不能代表汉编公司?

你只要回答“能”或者“不能”。

如果你再答非所问转移话题的话,那我就可以这样认为,你是以搞臭汉编为目的的。

如果能的话,就请你留下以下信息(姓名,何时加入汉编公司,担任什么职务,参与了汉编公司的哪些工作)并且保证为自己所说过的每一句话负上法律责任。

如果不能的话,请你以后多读点书,少说点话,汉编没你或许能发展起来。
东邪(林药师) [发送短信] 回复:[原创]线程、进程... 2007-10-26 23:23:46
#19
搞笑,进程就是一个程序的运行实例,线程是一个运行分支,说白了就是一个函数.
所有的WINDOWS下的程序最少都有一个线程.
和窗口有关的只有消息循环,如果一个线程有一个消息循环我们可以把这个线程叫做界面线程,反之把这个线程叫做工作线程.
万邦来朝 [发送短信] 回复:[原创]线程、进程... 2007-10-27 0:41:16
#20
 以下是引用东邪(林药师) 在第19楼的发言:
搞笑,进程就是一个程序的运行实例,线程是一个运行分支,说白了就是一个函数.
所有的WINDOWS下的程序最少都有一个线程.
和窗口有关的只有消息循环,如果一个线程有一个消息循环我们可以把这个线程叫做界面线程,反之把这个线程叫做工作线程.

你讲的界面线程和工作线程,才是真线程!他们讲的,都是吃西瓜,吃葡萄,不吐葡萄皮的线程!
万邦来朝 [发送短信] 回复:[原创]线程、进程... 2007-10-27 0:42:20
#21
 以下是引用东邪(林药师) 在第19楼的发言:
搞笑,进程就是一个程序的运行实例,线程是一个运行分支,说白了就是一个函数.
所有的WINDOWS下的程序最少都有一个线程.
和窗口有关的只有消息循环,如果一个线程有一个消息循环我们可以把这个线程叫做界面线程,反之把这个线程叫做工作线程.


你讲的界面线程和工作线程,才是真线程!他们讲的,都是吃西瓜,吃葡萄,不吐葡萄皮的线程!

你没有对此文章发表评论的权限!