首页 新闻 会员 周边

请问一个多核和多线程的关系?

0
悬赏园豆:5 [已解决问题] 解决于 2015-07-01 22:41

小弟初学线程 

对线程的概念 大概理解为

一个线程即一个执行流

但是听别人说不管创建多少线程 CPU都只在同一时间接受一个线程

 也不知道这是在单核还是多核的运行原理

如果4核CPU呢? 也有人说一个核等于一个线程 那CPU的4核八线程又是怎么回事?不矛盾吗?

总感觉很模糊,还望对线程了解大神给科普下 谢谢

狂扁小朋友的主页 狂扁小朋友 | 初学一级 | 园豆:10
提问于:2015-06-28 16:14
< >
分享
最佳答案
0

  其实,你把CPU的超线程技术和程序的多线程混淆了;

  先说CPU的超线程:这个技术只有Inter的芯片才有,Intel的超线程技术可以把一个核心虚拟成两个线程,每个线程在系统看来就是一个核心,比如4核八线程,在设备管理器中看到的就是8个核心,从而可以执行更多的任务,而AMD的CPU,一个核心就只是一个线程;这是CPU的超线程技术;

  再来说程序的多线程:

  比如Java,通过继承或实现多线程,可以让JVM同时运行多个任务,从而同时解决多种任务需求;

  然而,程序的多线程本质来说并不是同时运行的,而是CPU对每个线程进行快速切换,随机的分配资源给他们去运算,由于切换的速度非常之快,所以在人类看起来,多线程就是同时运行的的。

  That's All 

收获园豆:5
蒋至乙 | 菜鸟二级 |园豆:288 | 2015-06-28 20:19

哦 那运行的效率也不会提高啊,

按照CPU都只在同一时间接受一个线程的理论来看

如果

一个函数里面有2个任务 A任务和B任务  AB各需要1秒 也就是执行完这个函数要2秒

如果我用多线程 它会不同的切换 唯一的好处是 B无需等A执行完了才执行 但是结果还是用了2秒啊 

 

狂扁小朋友 | 园豆:10 (初学一级) | 2015-06-28 20:28

@狂扁小朋友: 哦 大神 我还想问如果一个核心处理一个线程 那是否意味着 我有4个核心的CPU 可以同时处理4个任务呢? 就不是CPU都只在同一时间接受一个线程了呢?

狂扁小朋友 | 园豆:10 (初学一级) | 2015-06-28 20:31

@狂扁小朋友:  好处就是A运行的同时, B也在运行,AB快速切换,这就是传说中的多任务。

蒋至乙 | 园豆:288 (菜鸟二级) | 2015-06-28 20:37

@狂扁小朋友: 不是,要看你程序里启用了几个线程,每个线程执行不同的任务,比如360,你杀毒的时候也可以清理垃圾,还可以升级系统补丁,清理木马,清理启动项,这多个任务在你看来就是同时进行的,任务多少要看程序启用了多少线程。

蒋至乙 | 园豆:288 (菜鸟二级) | 2015-06-28 20:43
其他回答(3)
0

反正一般地多线程运行会比较快。这么打比喻吧,假如一个线程1s内得到了0.01s的使用时间,如果有十个线程,每个线程也只是占有0.01s的时候,合在一起就是0.1s了,它占用cpu的时候多了,运行量就大了。

angelshelter | 园豆:9887 (大侠五级) | 2015-06-28 19:50
0

你不要这么厉害,软硬件通吃,这样谁敢请你,啥你都懂了。

你理解软件的多线程就是,我告诉管家(Windows)一堆事情,泡茶、烧开水、洗地板、擦窗户。

这时候管家就开始吩咐女佣干活,如果有4个女佣,和8个女佣,干活的速度肯定不一样的,

有的女佣可以一心两用,那就是Intel 发明的 Intel® Hyper-Threading Technology

要不然,一个女佣干六件事,肯定是一会儿干这个一会儿干那个。(CPU时间切片)

你也可以只有两个女佣,但是一下吩咐28件事情(System.Threading.Thread)。

但是实际上如果你只是要知道C#的多线程,根本不用管有几个女佣的。

我其他的倒是不担心,就是担心你知识学这么多了,没几家公司能请得起来。

爱编程的大叔 | 园豆:30839 (高人七级) | 2015-06-29 10:04
0

线程只是我们应用的概念而已,简单说其实是我们开发中用的一种表达和处理方式的术语而已,这个不同于CPU的多核和超线程概念

visonme | 园豆:1674 (小虾三级) | 2015-06-30 10:13
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册