线程之间的切换会消耗系统性能为啥还用多线程? 10C

线程之间的切换会消耗系统性能为啥还用多线程?重复执行几次不就好了吗?

10个回答

多线程可以实现任务的并发执行等,实现流程上的同时进行,效率更高啊
只不过如果你系统开太多线程,因为切换等原因,会导致性能有下降。
但是常规情况,比如开个10个线程做不同的任务,都是没有什么特别的问题

比如10个人访问你的业务一个请求要2s 一个在执行 剩下的人都要等着 多线程(抢占一个核的线程情况下)虽然线程切换会有损耗 但是在合理的线程数量
内会比较小 假如10个人访问一共2.1s同时响应。这就是效果

补充一下:
1、一个线程只能在一个CPU核心上运行,现在的CPU普遍都是多核心的,多线程可以利用多个CPU核心。
2、线程池和异步可以减少大量的线程切换

如果你的cpu够大,多线程可以同步执行,可以节省大量的时间。打个比方,你有10个快递小哥,去取10个快递,每个小哥只能拿一个快递,你同时叫10个小哥去取,肯定比叫1个去取10次要快。但是你cpu太小,你只有一个小快递哥,你怎么变花样都是一样的。

①现在cpu都是多个核心组成,你用多线程完成同一任务时,你的线程间就不会切换消耗了
②而且每个线程执行时间是固定的,你用多线程你就相当于获取了更长的cpu运算时间
3.线程池和异步可以减少大量的线程切换

线程池和异步可以减少大量的线程切换 有具体的理由吗??

这是需要权衡利弊的,虽然会消耗性能但是优势很明显,比如网页要持续处理用户的即时输入同时完成缓慢的数据加载,就需要用到多线程。
多线程的目标是处理异步事件而不是提高cpu性能,而且如果安排合理(比如楼上的线程池),那也不会很吃性能。楼主考虑的是理想情况下单个线程代码简单或可快速运行完,而楼上大佬说的是实际应用中的情况。
考虑上面的情形,如果我要处理100项缓慢数据加载而开启100个多线程,那性能消耗是显而易见的,常见的处理方式是开cpu个数个多线程,最大幅度减少切换带来的效率问题,然后程序猿面临的问题就是如何让几个多线程高效处理100个加载任务的问题了(这也催生了很多高效的管理方式,不过应该超出楼主问题范围了)。

不用线程,用进程的话,开销更大。不用进程和线程,没法并发,也没法利用多个cpu

的确和gpu相比,cpu的线程开销更大,所以计算密集一般用gpu

上面那些大佬说的都对,我是初学者,我就按照书上的补充下:
多线程访问同一片资源(地址空间),就不需要再分别去一次次的系统调用。(这个开销很大)
个人想法:我们只是编写软件,只考虑效率问题,不去考虑硬件问题。

知识点不多说。 多线程其实就是多个时间线。 这个问题可以给你打个比喻。

就像银行的柜台
如果只开一个窗口(单线程),那么我们办事情的时候就得排队执行,
万一你前面有个人办个业务要半个小时 (io阻塞),那你还是得等,明明你的事情只要一分钟就可以搞定了。

那么如果开了多个窗口(多线程), 银行还有叫号。遇到前面那个问题的时候, 那么还有其他窗口可以为你提供服务,这样你就不用等了。

所以这就是效率。

切换线程性能的开销,相对于上面提到的这种情况,其实很小的。

当然对于一些简单业务逻辑来说,就不要用多线程了。多线程的数据同步问题,也是很复杂的。 现在银行办业务要盖章,往往只有主管有,所以你会经常看到有一个主管个个窗口来回串去盖章。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问

相似问题

2
关于悲观锁跟乐观所性能问题 求解
2
是开两次多线程分别处理两个服务消耗大,还是开一次多线程一次性处理两个服务消耗大啊?
2
java多线程解决龟兔鸡赛跑
1
Java线程池的创建;是创建多个小线程池还是几个大的线程池
2
嵌入式多线程开发,多线程共享数据什么时候需要使用volatile?
2
关于多线程的使用,在同时分析每个教室的座位情况时,需要给每个教室一个线程吗?
7
多线程运行,有些线程总是不能启用
0
嵌入式linux C 多线程设定了每个线程的栈大小,程序运行后会出现直接系统死机现象
1
WPF多线程下,在多个线程运行的时候,不能实时监控到鼠标抬起?大佬们能为小弟答疑解惑,不胜感激
3
Linux 系统, 10进程每进程100线程 和 100进程每进程10线程 和 1进程,每进程1000线程 性能对比 ?
1
scrapy在多线程模式下,为每个线程设置独立的代理ip,并在后续请求不变,如何做到?
1
单核CPU多线程中各个线程的缓存是否是独立的,是对这个CPU的高速缓存和寄存器做了逻辑划分吗?
2
使用ssm开发一个售票系统的时候,需要考虑线程安全问题吗
3
C++ stream是多线程不安全的,我要怎么才能实现成多线程安全的呢?
4
多线程同时调用同一个方法读取不同对象数据怎么确保多线程线程执行完之后在执行其他逻辑。
2
C# 中foreach里面可以使用多线程吗?
1
多线程批量读取邮件信息
1
java多线程读取hbase, 是单例一个client供所有线程使用好呢 ,还是每个线程自己创建线程好呢
0
MFC创建多线程问题,实现自定义创建线程的数目