【并发编程的艺术读书笔记】多线程的效率以及资源浪费问题

简介

本文主要讨论多线程的效率以及资源浪费问题

1、多线程一定更快吗

多线程不一定更快,单核情况下多线程需要上下文切换,造成资源浪费,速度反而变慢。而多核情况下,每个核心执行自己的线程,不需要上下文切换,不造成资源浪费,速度更快。

什么是上下文切换

我们都知道cpu的核心数代表着最多能同时执行的线程数,但是在平时使用时可以发现,其实计算机中有万级以上的线程在运行,这是因为一个cpu核心在管理多个线程的时候会分配时间片,让每个线程执行一段时间保存再切换。
【并发编程的艺术读书笔记】多线程的效率以及资源浪费问题_第1张图片
而这个保存并切换的过程,就是上下文切换,上下文切换的开销一般是在毫秒级的,属于是比较高的开销

2、多线程的使用场景

根据上面的描述,既然多线程下会造成开销的提高,为什么还要使用多线程?
其实不是所有设计都要围绕快来展开的,还要考虑用户的体验。比如我们经常使用计算机,如果不保持每个软件的开启状态,我们是不是会很难受?所以多线程还是必要的。

多线程场景:

操作系统为了用户体验,使用多线程保持每个软件的运行。

当前要读取1000个网站的数据,获取时间是1ms,而网络延迟等待时间为100ms,也就意味着CPU要空转100*1000ms。可以把1000个网站平均分给10个线程,一个线程读取100个网站的数据,当有网络延迟等待时,切换到其他线程执行读取任务。

3、线程一定越多越好吗

线程并不是越多越好,也不是越少越好,而是要找一个折中点,具体要开多少个线程是要看实际情况做测试的(一般是几个到几十个)

4、如何查看线程信息

如何查看线程信息,jstack命令dump线程信息,导出快照

jstack pid

你可能感兴趣的:(读书笔记,java,多线程,juc,并发编程)