简介
本文主要讨论多线程的效率以及资源浪费问题
1、多线程一定更快吗
多线程不一定更快,单核情况下多线程需要上下文切换,造成资源浪费,速度反而变慢。而多核情况下,每个核心执行自己的线程,不需要上下文切换,不造成资源浪费,速度更快。
什么是上下文切换
我们都知道cpu的核心数代表着最多能同时执行的线程数,但是在平时使用时可以发现,其实计算机中有万级以上的线程在运行,这是因为一个cpu核心在管理多个线程的时候会分配时间片,让每个线程执行一段时间保存再切换。
而这个保存并切换的过程,就是上下文切换,上下文切换的开销一般是在毫秒级的,属于是比较高的开销
2、多线程的使用场景
根据上面的描述,既然多线程下会造成开销的提高,为什么还要使用多线程?
其实不是所有设计都要围绕快来展开的,还要考虑用户的体验。比如我们经常使用计算机,如果不保持每个软件的开启状态,我们是不是会很难受?所以多线程还是必要的。
多线程场景:
操作系统为了用户体验,使用多线程保持每个软件的运行。
当前要读取1000个网站的数据,获取时间是1ms,而网络延迟等待时间为100ms,也就意味着CPU要空转100*1000ms。可以把1000个网站平均分给10个线程,一个线程读取100个网站的数据,当有网络延迟等待时,切换到其他线程执行读取任务。
3、线程一定越多越好吗
线程并不是越多越好,也不是越少越好,而是要找一个折中点,具体要开多少个线程是要看实际情况做测试的(一般是几个到几十个)
4、如何查看线程信息
如何查看线程信息,jstack命令dump线程信息,导出快照
jstack pid