3.1 多线程cpu的概念
首先需要了解到为什么Java会支持多线程,这一切都是芯片技术的发展,多年前cpu还是单核运行模式,可以说是因为有了多核心处理器才有了并发,有了多核心多线程,才有了多线程运行的程序。
笔者做了一个多核多线程CPU的基本构成图,可以看出一定是多核心才会有并发,单核心多线程并不是真正的并发。
3.1.1 为什么会有并发编程
有了上述的概念之后,相信大家对多核CPU有了一定的认识,而并发编程就是帮助我们更加充分的利用多核CPU帮助我们工作。
3.1.1 是否多线程一定会更好?
当然不是,并发一定是我们需要的时候才使用,不是为了多线程编程而编程,多线程之间切换也是需要上下文开销的,如果处理不当的反而得不偿失。
3.1.2 多线程并发模型
当前主要是两种的线程之间的并发模型,一种是线程共享,一种是线程隔离,是什么意思呢?
线程共享,就是内存里的所有对象对当前所有线程都是可见的,可以直接对其进行读写操作,英文是shared state的表达。
线程隔离,就是内存里所有对象对当前所有线程是不能直接进行读写操作的,当我需要对其进行操作时,需要对其先复制到当前线程空间里,然后进行处理,最后对主存进行刷新。英文里是separate state的表达。
3.1.3 Java中的多线程
Java的线程和操作系统和CPU的线程是一一对应的关系,这个和Go完全不一样,Go中有了协程的概念,是一种天然支持并发的语言,协程可能是未来的趋势。