juc系列(1)---进程,线程,并行,并发

article/2025/9/19 17:50:20

目录

  • 概述
    • 进程
    • 线程
    • 关系
    • 并发并行:
    • 同步异步:
    • 对比

概述

进程

程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至CPU,数据加载至内
存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理IO的

当一个程序被运行,从磁盘加载这个程序的代码至内存,这时就开启了一个进程

进程就可以视为程序的一个实例。大部分程序可以同时运行多个实例进程(例如记事本、画图、浏览器
等),也有的程序只能启动一个实例进程(例如网易云音乐、360安全卫士等)

进程:程序是静止的,程序实体的运行过程就是进程,是系统进行资源分配的基本单位

进程的特征:并发性、异步性、动态性、独立性、结构性

线程

线程是属于进程的,是一个基本的 CPU 执行单元,是程序执行流的最小单元。
线程是进程中的一个实体,是系统独立调度的基本单位,线程本身不拥有系统资源,只拥有一点在运行中必不可少的资源,与同属一个进程的其他线程共享进程所拥有的全部资源

关系

一个进程可以包含多个线程,这就是多线程,比如看视频是进程,图画、声音、广告等就是多个线程

线程的作用:使多道程序更好的并发执行,提高资源利用率和系统吞吐量,增强操作系统的并发性能

单个cpu下的 单位时间内多个线程交替执行,但某个时刻只能有一个线程在运行
单个cpu的并发多线程
多个cpu的并行(单位时间内以及某个时刻都是多个线程同时进行)
多个cpu的并行

并发并行:

  • 并行:在同一时刻,有多个指令在多个 CPU 上同时执行
  • 并发:在同一时刻,有多个指令在单个 CPU 上交替执行

同步异步:

  • 需要等待结果返回,才能继续运行就是同步
  • 不需要等待结果返回,就能继续运行就是异步

对比

线程进程对比:

  • 进程基本上相互独立的,而线程存在于进程内,是进程的一个子集

  • 进程拥有共享的资源,如内存空间等,供其内部的线程共享

  • 进程间通信较为复杂

    同一台计算机的进程通信称为 IPC(Inter-process communication)

    • 信号量:信号量是一个计数器,用于多进程对共享数据的访问,解决同步相关的问题并避免竞争条件
    • 共享存储:多个进程可以访问同一块内存空间,需要使用信号量用来同步对共享存储的访问
    • 管道通信:管道是用于连接一个读进程和一个写进程以实现它们之间通信的一个共享文件 pipe 文件,该文件同一时间只允许一个进程访问,所以只支持半双工通信
      • 匿名管道(Pipes):用于具有亲缘关系的父子进程间或者兄弟进程之间的通信
      • 命名管道(Names Pipes):以磁盘文件的方式存在,可以实现本机任意两个进程通信,遵循 FIFO
    • 消息队列:内核中存储消息的链表,由消息队列标识符标识,能在不同进程之间提供全双工通信,对比管道:
      • 匿名管道存在于内存中的文件;命名管道存在于实际的磁盘介质或者文件系统;消息队列存放在内核中,只有在内核重启(操作系统重启)或者显示地删除一个消息队列时,该消息队列才被真正删除
      • 读进程可以根据消息类型有选择地接收消息,而不像 FIFO 那样只能默认地接收

    不同计算机之间的进程通信,需要通过网络,并遵守共同的协议,例如 HTTP

    • 套接字:与其它通信机制不同的是,可用于不同机器间的互相通信
  • 线程通信相对简单,因为线程之间共享进程内的内存,一个例子是多个线程可以访问同一个共享变量

    Java 中的通信机制:volatile、等待/通知机制、join 方式、InheritableThreadLocal、MappedByteBuffer

  • 线程更轻量,线程上下文切换成本一般上要比进程上下文切换低



http://chatgpt.dhexx.cn/article/1KMlUieA.shtml

相关文章

JUC系列(九) CAS 与锁的理解

📣 📣 📣 📢📢📢 ☀️☀️你好啊!小伙伴,我是小冷。是一个兴趣驱动自学练习两年半的的Java工程师。 📒 一位十分喜欢将知识分享出来的Java博主⭐️⭐️⭐️,擅…

JUC系列(四)

1、CAS 1.1、没有CAS之前,保证线程安全的方式 多线程环境不使用原子类保证线程安全(基本数据类型) public class T3 {volatile int number 0;//读取public int getNumber(){return number;}//写入加锁保证原子性public synchronized void…

1、什么是juc

1、juc简介 在java中,线程部分是重点,juc就是java.util.concurrent工具包的简称。这是一个处理线程的工具包,从jdk1.5开始出现 2、进程与线程 进程:指在系统中正在运行的一个应用程序;程序一旦运行就是进程&#xff1…

JUC系列(六) 线程池

📣 📣 📣 📢📢📢 ☀️☀️你好啊!小伙伴,我是小冷。是一个兴趣驱动自学练习两年半的的Java工程师。 📒 一位十分喜欢将知识分享出来的Java博主⭐️⭐️⭐️,擅…

JUC系列(五)

1、ThreadLocal 1.1、什么是ThreadLocal 线程局部变量。 1.2、ThreadLocal的作用以及可以为什么保证线程安全? 多线程访问同一个共享变量的时候容易出现并发问题,特别是多个线程对一个变量进行写入的时候,为了保证线程安全,一…

JUC系列(二)

1、聊一聊Java“锁” 1.1、乐观锁和悲观锁 悲观锁:认为自己在使用数据的时候一定有别的线程来修改数据,因此在获取数据的时候会先加锁,确保数据不会被别的线程修改。synchronized关键字和Lock的实现类都是悲观锁。适合写操作多的场景&#…

JUC概述

JUC是什么? JUC就是java.util.concurrent,java.util.concurrent.atomic和java.util.concurrent.locks三个工具类包,它们是处理线程的工具包,最开始出现是从JDK 1.5开始出现。(JUC就是java.util.concurrent工具类的首字母&#xf…

JUC系列一:什么是JUC

前言:笔记整理参考尚硅谷周阳老师在B站上的JUC教程,万分感谢周阳老师。有兴趣的朋友可以在B站搜索周阳老师的视频教程,绝对让你受益匪浅,期望未来也能成为像周阳老师那样的人O(∩_∩)O哈哈~。 JUC B站视频地址 https://www.bilib…

01_JUC概述

1. JUC是什么? 在 Java 5.0 提供了 java.util.concurrent(简称JUC)包,在此包中增加了在并发编程中很常用的工具类。此包包括了几个小的、已标准化的可扩展框架,并提供一些功能实用的类,没有这些类,一些功能会很难实现或…

JUC系列(三)

1、Java内存模型 1.1、什么是Java内存模型JMM? JMM(Java内存模型Java Memory Model,简称JMM)本身是一种抽象的概念并不真实存在,它仅仅描述的是一组约定或规范,通过这组规范定义了程序中(尤其是多线程)各个变量(包括…

JUC系列——基础知识 day1-1

JUC系列——基础知识 day1-1 JUC基础知识进程线程进程和线程区别并行与并发同步使用场景 异步使用情景 QuickStart(new Thread方式创建新线程)匿名内部类方式lambda简化 Thread类(仅分析功能)优先级常量方法(常用&…

JUC系列(六)

1、AbstractQueuedSynchronizer之AQS AbstractQueuedSynchronizer简称为AQS,抽象的队列同步器 AQS:是用来构建锁或者其它同步器组件的重量级基础框架及整个JUC体系的基石,使用一个int类变量表示持有锁的状态,通过内置的FIFO队列…

JUC系列(一)

1、为什么多线程极其重要? ​ 多线程变得极其重要的原因从软硬件两个方面来说,首先硬件方面:主要是摩尔定律失效,它是由英特尔创始人之一Gordon Moore(戈登摩尔)提出来的,其内容是当价格不变时,将每隔18个月&#xff…

JUC系列(一)什么是JUC?

多线程一直Java开发中的难点,也是面试中的常客,趁着还有时间,打算巩固一下JUC方面知识,我想机会随处可见,但始终都是留给有准备的人的,希望我们都能加油!!! 沉下去&#…

JUC系列——JUC入门及多线程并发

文章目录 前言一、JUC简介1、出自哪位大神之手?2、JUC是什么? 二、JUC主要解决什么问题?1、进程 、线程2、并发、并行3、JAVA创建线程的方式(模拟三种线程实现方式)1)继承Thread类(线程的初级用…

Java进阶|JUC系列(持续更新)

文章目录 1、什么是J.U.C2、进程、线程、协程2.1 简介2.2 线程有几个状态2.3 wait和sleep的区别 3、Lock锁(重点)3.1 简介3.2 lock锁和synchronized有什么区别 4、生产者和消费者问题4.1 简介4.2 使用synchronized实现的demo4.3使用Lock实现的demo 5、锁的是谁问题1、两个线程访…

莱布尼茨公式C语言编程,高等数学——手撕牛顿莱布尼茨公式

本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是高等数学专题的第13篇文章,我们来看看定积分究竟应该怎么计算。 定积分的实际意义 通过之前的文章,我们基本上熟悉了定积分这个概念和它的一些简单性质&#x…

[计算机数值分析]牛顿插值公式

Spring-_-Bear 的 CSDN 博客导航 埃特金算法虽然具有承袭性,但其算式是递推型的,不便于进行理论上的分析。所以采用具有承袭性的显式的牛顿插值公式是不错的选择。 p n ( x ) f ( x 0 ) f ( x 0 , x 1 ) ( x − x 0 ) . . . f ( x 0 , x 1 , . . . …

如何用计算机做牛顿迭代公式,牛顿迭代法

牛顿迭代法(Newtons method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。 中文名 牛顿迭代法 外文名 Newtons method别 名 牛顿-拉夫逊(拉弗森)方法 提出时间 17世纪 牛顿迭代法产生背景 编辑…