A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© chilong_333 中级黑马   /  2013-8-1 14:37  /  2688 人查看  /  15 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

多线程即是同时执行多条命令或者多项进程。然而又说多线程只是快速的在多条进程中不断的切换,那么是不是可以这么理解。。。线程就是在A任务B任务C任务中快速的切换执行。
也就是说在执行A的时候BC都将等待,执行B的时候AC都将等待。好比ABC是三盆衣服,如果单线程的话就是一盆一盆去洗,多线程就是A盆洗一件再去洗B盆的,B盆的洗完一件再去洗C盆的。最后结果是单线程只是一盆一盆洗干净,然而多线程只是一件一件的洗,不过是挨盆洗罢了。这样的话和单线程有什么区别?哪里快了?反正都是3盆衣服,怎么洗不是洗。。。如果要说多线程是3个人洗的话,那么切换的是什么?什么东西在不停快速的切换。请形容的告诉小弟下,感激不尽。

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 你还菜鸟、、、、、、、

查看全部评分

15 个回复

倒序浏览
线程是一个进程的执行场景,一个进程可以启动多个线程。多线程是用来提高应用程序的使用率,而不是提高程序的执行速度。cpu的执行速度很快,人是感觉不到的,在不同的进程间切换执行,并且等待的时间也是很短的,故此多线程的作用就是增加cpu的使用率。

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 不错不错,继续讨论

查看全部评分

回复 使用道具 举报
sergio 发表于 2013-8-1 15:02
线程是一个进程的执行场景,一个进程可以启动多个线程。多线程是用来提高应用程序的使用率,而不是提高程序 ...

那总说多线程执行速度快,或者说迅雷下载就是在用多线程,那么既然跟速度不搭边为什么迅雷下载比正常下载速度快呢???不是因为多线程吗?就好比1个人搬5个箱子,和5个人一人搬一个箱子。
回复 使用道具 举报
是因为多线程。cpu和内存间的运行速度是很快的,比如你使用单线程下载东西,只能够占用cpu的10%的资源,然后跟内存进行交互;而是使用多线程了,cpu的使用率可能在50%,然后跟内存交互。间接的提高了速度,当然是没有考虑内存大小因素的。
回复 使用道具 举报
sergio 发表于 2013-8-1 15:20
是因为多线程。cpu和内存间的运行速度是很快的,比如你使用单线程下载东西,只能够占用cpu的10%的资源,然 ...

我现在了解点了,但是还是有个盲区,打比方一个进程有A线程,和一个进程有A和B线程。。。
CPU在控制A线程的时候A是一直执行的,但是要控制第二个的时候,执行权在A的时候B是休息的执行B的时候A是休息的,那么这两个人我可以形象的说下,,一个是一个人干一份活,另一个不过是两个人替班的干活(并非两人一起干活)。效率不一样吗?
回复 使用道具 举报
具体可以看下我的截图
回复 使用道具 举报
就像你说的有两个进程,编号为A、B线程。但A进程中只有一个a线程去执行;B进程中有两个b、c线程去执行。比喻下,两个进程所需要条件都一样,A进程只有一个a线程去执行耗费cpu资源为10%,而B进程中有b、c线程去执行,可以把cpu的资源耗费提高为20%左右。相较下B线程的执行速度就要快一些了,当然没有考虑内存大小的因素,当然cpu的频率也够快。
回复 使用道具 举报
本帖最后由 Angel♥儱唲 于 2013-8-1 17:50 编辑

{:soso_e124:}有时候我也在多线程的效率问题上迷糊,都说提高效率了,但是有时候我就觉得多线程和单线程么有区别,就拿毕老师的例子:一个人去搬5个箱子和5个人去搬5个箱子说,单线程1个人是一次拿一个箱子跑5次。而多线程呢他也是每次只有一个人去搬箱子另外4个等待,只不过是每次搬的人不同啊,总体也是跑5次,这能说明多线程的快么,而且我觉得还有个问题就是cpu尽管切换的很快,但这中间也是有时间间隔的,这时候多线程比单线程还慢 了吧
回复 使用道具 举报
Angel♥儱唲 发表于 2013-8-1 17:42
有时候我也在多线程的效率问题上迷糊,都说提高效率了,但是有时候我就觉得多线程和单线程么 ...

咋说呢,当你不能理解的时候。就抽象的理解吧,别仔细想,越想越糊涂。
回复 使用道具 举报
Angel♥儱唲 发表于 2013-8-1 17:42
有时候我也在多线程的效率问题上迷糊,都说提高效率了,但是有时候我就觉得多线程和单线程么 ...

咋说呢,当你不能理解的时候。就抽象的理解吧,别仔细想,越想越糊涂。
回复 使用道具 举报
对于你说的这个例子我是这样理解多线程的,有A,B,C三个人去洗衣服,但是只有一个盆子,他们三个要想洗衣服就要去抢盆子,当A抢到盆子时A洗一件衣服时B和C都处于等待状态,当A洗完这件衣服时,A就会把盆子释放出来,然后A,B,C三人都可以再去抢盆子,谁抢到,其他人就等待盆子再次被释放。
回复 使用道具 举报
呵呵,比喻有点道理,我觉得这个洗衣服的多少应该不是平均分配的,这个要看CPU的随机分配了,也许一个的一盆衣服洗完了再开始洗另一盆,多线程的最大特点就是线程执行的随机性。但是又有平均性,那就是各个进程都有可能被立即执行。
回复 使用道具 举报
天涯海角 发表于 2013-8-7 17:00
对于你说的这个例子我是这样理解多线程的,有A,B,C三个人去洗衣服,但是只有一个盆子,他们三个要想洗衣 ...

那多线程提高效率,提高的是什么效率,所谓的速度快,快在哪了?既然都是一个单元在工作,一个不过是从头做到尾。另一个是每个做一点,就好比我们写假期作业一样,我们自己就是CPU,然而作业就是线程,兴许你写一半作文不爱写了,接着去写数学题。数学题写一会又想去背单词。这个效率和我们按部就班的去做作业区别在哪?反正都是这些工作量,都是你一个CPU在运作。绝对不可能说在有一个人帮你写作业,当然如果双核处理器全当我放屁。
回复 使用道具 举报
我是这样理解多线程的速度快的,就拿你说的这个比喻来说:我们自己是cup,作业是线程,cup是多个线程竞争的资源。我们自己相当于各项作业竞争的资源,当我们的任何一项作业没做完时,各项作业作业都会去抢我们,这时我们就不会闲置下来,一直处于工作状态,这样我们就能快点完成作业了。
回复 使用道具 举报
天涯海角 发表于 2013-8-9 17:43
我是这样理解多线程的速度快的,就拿你说的这个比喻来说:我们自己是cup,作业是线程,cup是多个线程竞争的 ...

那你要是一个一个去做的话,也是闲不下来啊。。你也得一直做啊。。。CPU在做线程的时候,线程没结束他能停么?不一个道理么,一个一个做他也是闲不下来的啊。
回复 使用道具 举报
菜鸟一枚路过
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马