1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-06-16 18:10:13 +08:00

跟新了单核和多核系统中多线程的主要作用。

对系统中存在多个进程的情况进行了备注,防止读者迷惑
This commit is contained in:
VinterHe 2021-06-22 09:53:11 +08:00 committed by GitHub
parent 287e73c9e0
commit 64cc847b61
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -126,8 +126,11 @@ public class MultiThread {
再深入到计算机底层来探讨:
- **单核时代:** 在单核时代多线程主要是为了提高 CPU 和 IO 设备的综合利用率。举个例子:当只有一个线程的时候会导致 CPU 计算时IO 设备空闲;进行 IO 操作时CPU 空闲。我们可以简单地说这两者的利用率目前都是 50%左右。但是当有两个线程的时候就不一样了,当一个线程执行 CPU 计算时,另外一个线程可以进行 IO 操作,这样两个的利用率就可以在理想情况下达到 100%了。
- **多核时代:** 多核时代多线程主要是为了提高 CPU 利用率。举个例子假如我们要计算一个复杂的任务我们只用一个线程的话CPU 只会一个 CPU 核心被利用到,而创建多个线程就可以让多个 CPU 核心被利用到,这样就提高了 CPU 的利用率。
- **单核时代** 在单核时代多线程主要是为了提高单进程利用CPU和IO系统的效率。 当我们请求IO的时候如果java进程中只有一个线程此线程被IO阻塞则整个进程被阻塞。CPU和IO设备只有一个在运行那么可以简单地说系统整体效率只有50%。当使用多线程的时候一个线程被IO阻塞其他线程还可以继续使用CPU。从而提高了java进程利用系统资源的整体效率。
注意此种情况是指的计算机只有一个CPU核心并且假设只运行了一个java进程的情况多进程的时候操作系统会调度不同进程占用CPU也不会存在浪费CPU的问题只不过是因为大型项目中作为服务器运行的机器中一般不会运行太多无关进程所以才可作此假设。
- **多核时代**: 多核时代多线程主要是为了提高进程利用多核CPU的能力。举个例子假如我们要计算一个复杂的任务我们只用一个线程的话不论系统有几个CPU核心都只会有一个 CPU 核心被利用到。而创建多个线程这些线程可以被映射到底层多个CPU上执行在任务中的多个线程没有资源竞争的情况下任务执行的效率会有显著性的提高约等于单核时执行时间/CPU核心数
## 5. 使用多线程可能带来什么问题?