JUC并发编程 -- JUC介绍 & 线程/进程 & 并发/并行 & Java代码查看CPU的核数

Posted Z && Y

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JUC并发编程 -- JUC介绍 & 线程/进程 & 并发/并行 & Java代码查看CPU的核数相关的知识,希望对你有一定的参考价值。

1. JUC介绍

JUC就是java.util .concurrent工具包的简称。这是一个处理线程的工具包。


2. 线程/进程

进程:

  • 进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。

线程:

  • 通常在一个进程中可以包含若干个线程,当然一个进程中至少有一个线程,不然没有存在的意义,线程可以利用进程所有拥有的资源。在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位,由于线程比进程小,基本上不拥有系统资源,故对它的调度所付出的开销就会小得多,能更高效的提高系统多个程序间并发执行的程度。

概念精简:

  • 进程:指在系统中正在运行的一个应用程序;程序一旦运行就是进程;进程是资源分配的最小单位。
  • 线程:系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元执行流。线程是程序执行的最小单位。

任务管理器:

白话:

  • 进程:就是操作系统中运行的一个程序,QQ.exe, music.exe, word.exe ,这就是多个进程
  • 线程:每个进程中都存在一个或者多个线程,比如用word写文章时,就会有一个线程默默帮你定时自动保存,还有一个线程帮你检查拼写错误。

3. 并发/并行

做并发编程之前,必须首先理解什么是并发,什么是并行。

  • 并发和并行是两个非常容易混淆的概念。它们都可以表示两个或多个任务一起执行,但是偏重点有点不同。并发偏重于多个任务交替执行,而多个任务之间有可能还是串行的。并发是逻辑上的同时发生(simultaneous),而并行是物理上的同时发生。然而并行的偏重点在于”同时执行”。
  • 严格意义上来说,并行的多个任务是真实的同时执行,而对于并发来说,这个过程只是交替的,一会运行任务一,一会儿又运行任务二,系统会不停地在两者间切换。但对于外部观察者来说,即使多个任务是串行并发的,也会造成是多个任务并行执行的错觉。
  • 实际上,如果系统内只有一个CPU,而现在而使用多线程或者多线程任务,那么真实环境中这些任务不可能真实并行的,毕竟一个CPU一次只能执行一条指令,这种情况下多线程或者多线程任务就是并发的,而不是并行,操作系统会不停的切换任务。真正的并发也只能够出现在拥有多个CPU的系统中(多核CPU)。

并发的动机:

  • 在计算能力恒定的情况下处理更多的任务,就像我们的大脑,计算能力相对恒定,要在一天中处理更多的问题,我们就必须具备多任务的能力。 现实工作中有很多事情可能会中断你的当前任务, 处理这种多任务的能力就是你的并发能力。

并行的动机:

  • 用更多的CPU核心更快的完成任务. 就像一个团队, 一个脑袋不够用了, 一个团队来一起处理一个任务。

例子:

  • 你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行。
  • 你吃饭吃到一半,电话来了,你停了下来接了电话,接完后继续吃饭,这说明你支持并发。 (不一定是同时的)
  • 你吃饭吃到一半,电话来了,你一边打电话一边吃饭,这说明你支持并行。

小结:

所以并发编程的目标是充分的利用处理器的每一个核,以达到最高的处理性能。


4. Java代码查看CPU的核数

代码:

    public static void main(String[] args) {
        // Java代码查看CPU核数
        System.out.println("本机CPU的核数为: " + Runtime.getRuntime().availableProcessors());
    }

运行结果:

补充: 其他方式查看CPU的核数

  1. 任务管理器

  2. 计算机管理器



以上是关于JUC并发编程 -- JUC介绍 & 线程/进程 & 并发/并行 & Java代码查看CPU的核数的主要内容,如果未能解决你的问题,请参考以下文章

JUC并发编程 线程运行原理 -- 多线程 & 上下文切换

JUC并发编程 -- 观察线程运行的现象 & 查看进程线程的方法

JUC并发编程 共享模式之工具 JUC 读写锁 StampedLock -- 介绍 & 使用

一文总结 JUC 并发编程

JUC并发编程 -- 回顾多线程(线程的六种状态 & wait / sleep 的区别)

JUC并发编程 线程运行原理 -- 栈帧 & 栈帧图解