同线程

JAVA多线程之四---同一线程化

流过昼夜 提交于 2019-11-27 20:17:53
同线程 也是一种并发模型,指的是从单线程系统扩展中出N个单线程系统。 N个单线程在系统中并行运行。同线程不等于单线程,因为,它里面也包含着多个线程。 只是每个线程都像单线程那样运行。 单线程系统 可能有人不理解,现如今怎么还有人设计一个单线程系统。 单线程系统流行,主要是应为它们的并发模型相对多线程系统来说更加简单。 单线程系统没有什么数据需要和其他线程共享使用。 这就让单个线程可以使用非并发的数据结构,而且还可以更好的利用CPU以及CPU内部缓存。但是,单线程系统并不能完全发挥出现代CPU的能力。现代CPU一般都有2核,4核或者更多内核。每个内核都是一个独立的CPU。 单线程系统只能利用一个内核。如图所示: 同线程,单线程扩展 为了充分利用CPU中的所有内核,单线程系统可以进行扩展。 每个CPU一个线程 同线程系统经常是每个CPU一个线程。 如果计算机有4个CPU,或者CPU有4个内核,那就运行4个相同的“单线程”。如图所示: 没有共享数据 同线程系统中运行着多个线程,所以看起来类似一个多线程系统。 但是两个并不相等。区别就在于同线程系统中没有共享数据。 共享内存区域没有并发访问。没有并发型数据结构等等。如图所示: 没有共享数据,就可以让每个线程都可以像单线程系统那样运转。 同线程系统中虽然包含更多的线程,但并不是“单线程系统”。 这个名字可能并不十分准确,但至少“同线程”