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

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

多线程可以实现任务的并发执行等,实现流程上的同时进行,效率更高啊
只不过如果你系统开太多线程,因为切换等原因,会导致性能有下降。
但是常规情况,比如开个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阻塞),那你还是得等,明明你的事情只要一分钟就可以搞定了。

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

所以这就是效率。

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

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

得看你的业务逻辑,如果只是简单的逻辑,没必要使用多线程,再就是线程也不是越多越好,比如下载逻辑,一般都是多线程下载,但在游戏边玩边下的时候,要根据不同配置的机器限制线程个数,否则边玩边下的时候特别卡。