多线程cpu有什么好处
发布网友
发布时间:2022-03-29 02:34
我来回答
共4个回答
热心网友
时间:2022-03-29 04:04
CPU多线程简称SMT,可通过复制处理器上的结构状态,让同一个处理器上的多个线程同步执行并共享处理器的执行资源,可最大限度地实现宽发射、乱序的超标量处理,提高处理器运算部件的利用率,缓和由于数据相关或Cache未命中带来的访问内存延时。
注:当没有多个线程可用时,SMT处理器几乎和传统的宽发射超标量处理器一样。
cpu的多线程技术可以为高速的运算核心准备更多的待处理数据,减少运算核心的闲置时间;解决了负载均衡问题,充分利用了CPU资源,提高CPU的使用率。采用多线程的方式可以同时完成几件事情而不互相干扰,缩短了处理大量的IO操作时或处理的情况需要花费大量的时间。
多线程的好处:
1、使用线程可以把占据时间长的程序中的任务放到后台去处理
2、用户界面更加吸引人,这样比如用户点击了一个按钮去触发某件事件的处理,可以弹出一个进度条来显示处理的进度
3、程序的运行效率可能会提高
4、在一些等待的任务实现上如用户输入,文件读取和网络收发数据等,线程就比较有用了.
多线程的缺点:
1、如果有大量的线程,会影响性能,因为操作系统需要在它们之间切换.
2、更多的线程需要更多的内存空间
3、线程中止需要考虑对程序运行的影响.
4、通常块模型数据是在多个线程间共享的,需要防止线程死锁情况的发生
热心网友
时间:2022-03-29 05:22
java线程调度
CPU对于各个线程的调度是随机的(分时调度),在Java程序中,JVM负责线程的调度。 线程调度是指按照特定的机制为多个线程分配CPU的使用权,也就是实际执行的时候是线程,因此CPU调度的最小单位是线程,而资源分配的最小单位是进程。
JVM调度的模式有两种:分时调度和抢占式调度。
分时调度 是所有线程轮流获得CPU使用权,并平均分配每个线程占用CPU的时间;
抢占式调度 是根据线程的优先级别来获取CPU的使用权。JVM的线程调度模式采用了抢占式模式。既然是抢占调度,那么我们就能通过设置优先级来“有限”的控制线程的运行顺序,注意“有限”一次。
CPU核数 跟多线程 的关系
要说多线程就离不开进程,进程和线程的区别在这里就不详细说了,只将关键的几点:
a)进程之间是 相互独立的,不共享 内存和数据,线程之间 的内存和数据是 公用的,每个线程只有自己的一组CPU指令、寄存器和堆栈,对于线程来说只有CPU里的东西是自己独享的,程序中的其他东西都是跟同一个进程里的其他线程共享的。
b)操作系统创建进程时要分配好多外部资源,所以开销大。(这个跟操作系统有关,有人做过实验,window创建进程的开销大,Linux创建进程的开销就很小。)
再来说一下CPU,过去单CPU时代,最先是单任务阶段 在一个时间点 只能执行单一程序。之后发展到多任务阶段,计算机能在同一时间点并行执行多任务或多进程。虽然并不是真正意义上的“同一时间点”,而是多个任务或进程共享一个CPU,并交由操作系统来完成多任务间对CPU的运行切换,以使得每个任务都有机会获得一定的时间片运行。而现在多核CPU的情况下,同一时间点可以执行多个任务(并行),具体到这个任务在CPU哪个核上运行,这个就跟操作系统和CPU本身的设计相关了。
我们假设一个极端的情况:在一台单核计算机上只运行2个程序,一个是我们的程序A,另一个是操作系统的程序B,每个程序是一个进程。单核CPU的时候,A和B在CPU上交替运行,具体的分配方式由操作系统来判断,我这里猜测应该跟A和B的线程数有关,因为线程是CPU级别的,如果A有5个线程,B也有5个线程,那么CPU分配给A和B的时间应该是1:1的;如果A增加到15个线程,CPU分配给A和B的时间应该是3:1的比例。所以此时如果A的线程数多,那么获得的CPU执行次数就多,处理的速度也就快了。以上假设的前提是:
①A和B的优先级相同,
②A和B都是只消耗CPU资源的程序。
如果相同的情况用一个双核的计算机来处理又会是什么结果呢?假设这个双核的计算机和操作系统比较傻,把A进程分配到核1上,B进程分配到核2上,那不管A有几个线程,都是用核1来处理,那么时间肯定是一样的。不过现实中应该不会有这么傻的CPU和操作系统吧。所以赶紧还是会根据线程来进行处理,当A的线程比B多时,会占用核2来处理A的线程。
刚才说的是只消耗CPU资源的程序,但这样的程序在实际应用中基本上是没有的,总会有跟资源打交道的。比如读个文件,查个数据库,访问一个网络连接等等。这个时候多线程才真正体现出优势,在一个进程中,线程a去读文件,线程b去查数据库,线程c去访问网络,a先用一下CPU,然后去读文件,此时CPU空闲,b就用一下,然后去查数据库,相对于读文件、查数据库、访问网络来说CPU计算的时间几乎可以忽略不计,所以多线程实际上是计算机多种资源的并行运用,跟CPU有几个核心是没什么关系的。
热心网友
时间:2022-03-29 06:56
比如你既要打王者荣耀又要打撸啊撸
单线程,你只能先打其中一个游戏,打完一个,再去打另一个游戏
多线程,你可以同时打这两个游戏。前提速度得和cpu那么快,比如1毫秒切换一下游戏,王者荣耀走个位,1毫秒后,再到撸啊撸走个位
热心网友
时间:2022-03-29 08:48
没有什么好外,就是能同时做多件事而已!