不要玄之又玄:多线程相关知识点的通俗理解

embedded/2024/11/13 5:17:16/

这里是目录

  • 线程和进程的区别
  • 多线程的几个对象
  • 线程池
  • 线程间的同步的方式

线程和进程的区别

  • 进程是一个程序执行一次创建的,是系统运行程序的基本单位。
  • 线程是⼀个⽐进程更⼩的执⾏单位,一个进程在运行期间可以产生多个线程。多个线程可以共享进程的堆和⽅法区资源,每个线程有⾃⼰的程序计数器、虚拟机栈和本地⽅法栈。
  • 线程是进程划分成的更⼩的运⾏单位。
  • 线程和进程最⼤的不同在于基本上各进程是独⽴的,⽽各线程则可以有共享的资源也有自己独有的资源。
  • 线程执⾏开销⼩,但不利于资源的管理和保护;⽽进程正相反

多线程的几个对象

  • 任务对象
    • Runable
      • 核心方法run方法
      • 需要通过executor的execute方法执行
    • Callable:
      • 核心方法 call方法
      • 需要通过executor的submit方法执行
  • 执行对象
    • executor:顶层接口,包含execute方法
    • ExecutorService:继承executor接口,包含submit和shutdown方法
  • 结果
    • Future:线程返回结果的顶层接口,包含get方法
    • FutureTask是Future的实现类

线程池

  • ThreadPoolExecutor

    • 核心参数
      • 核心线程数
      • 最大线程数
      • 等待队列最大长度
    • Executors工具类实现的线程池
      • FixedThreadPool:固定线程数,使用无界等待队列,大量任务堆积等待队列中会出现OOM
      • SingleThreadExecutor:线程池只有一个线程,使用无界等待队列,大量任务堆积等待队列中会出现OOM
      • CachedThreadPool:使用的同步队列,不存储等待任务,只要任务进来,就创建线程执行任务,且允许创建的线程数量为 Integer.MAX_VALUE,会出现OOM
      • ScheduledThreadPool:使用的无界的延迟阻塞队列,内容使用的最小堆排列,同样大量任务堆积等待队列中会出现OOM
    • 线程池的拒绝策略
      • 抛出异常之后拒绝任务
      • 将任务回退给调用者,使用调用者的线程来执行任务
      • 直接丢弃掉
      • 丢弃等待队列中的最早进来的未处理的任务请求
    • 线程池中任务进来的判断流程
      • 在这里插入图片描述
      • 可以看出是先判断等待队列是否可以放入,才判断是否是小于最大线程数,然后创建线程
  • 线程池创建核心参数设置

    • 计算密集型
      • 可以将线程数设置为 N(CPU 核心数)+1
    • IO密集型
      • 设置最大进程数为2N
  • 线程池尽量不要放耗时任务

    • 线程池本身的目的是为了提高任务执行效率,避免因频繁创建和销毁线程而带来的性能开销。如果将耗时任务提交到线程池中执行,可能会导致线程池中的线程被长时间占用,无法及时响应其他任务,甚至会导致线程池崩溃或者程序假死。

线程间的同步的方式

  • 互斥:只有拿到互斥对象的线程才能访问资源
  • 信号量:允许多个线程访问资源,当时线程数必须在信号量允许的范围内
  • 事件:通过事件通知的方式实现线程同步。

http://www.ppmy.cn/embedded/107142.html

相关文章

QT做一个USB HID设备识别软件

1.下载 HidApi库&#xff1a;GitHub - yigityuce/HidApi: Human Interface Device Api (HidApi) with C 2.pro文件添加 DEFINES - UNICODE LIBS -lsetupapi 3.h文件 #ifndef My_Usb_Hid_Device_H #define My_Usb_Hid_Device_H#include <QWidget> #include <QStr…

nanogpt怎么进行模型切片,以实现推理过程算力共享,切多头

目录 nanogpt怎么进行模型切片,以实现推理过程算力共享,切多头 1. 多头并行与数据并行结合 2. 模型切片策略 3. 多头并行实现 4. 注意事项 5. 示例说明 大语言模型推理过程中多头切片运行,是从头到尾全部并行执行 1. 模型切片运行的概念 2. nanoGPT的特点 3. 并行…

Java常见排序算法详解

前言 排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 在Java中&#xff0c;排序算法是一种对数据集合中的元素按照特定顺序进行排列的算法。排序算法通常用于将数据按照升序或者降序排列&#xff0c;…

SQLite 创建表:一场数据库里的“造物运动”

嘿&#xff0c;各位数据库的“造物主”们&#xff01;今天咱们来聊聊SQLite里的一场有趣活动——创建表。没错&#xff0c;就像上帝创造了世界&#xff0c;我们也可以在SQLite数据库里创造属于我们自己的“小世界”。 一、创建表的“魔法咒语” 在SQLite这个“魔法世界”里&a…

python办公自动化:使用`Python-PPTX`创建和操作表格

表格是演示文稿中用于组织和显示数据的重要工具。使用Python-PPTX库&#xff0c;您可以在幻灯片中创建和自定义表格&#xff0c;包括设置表格的大小、格式和内容。本节将介绍如何使用Python-PPTX库创建表格并进行各种操作。 1 创建基本表格 在Python-PPTX中&#xff0c;表格是…

2024年SRM管理系统盘点合集,助力企业选型!

本文将盘点六款主流的SRM管理系统&#xff0c;助力企业选型&#xff01; 想象一下这样一个场景&#xff0c;企业的采购部门每天都在为寻找合适的供应商、管理采购订单以及确保物资及时供应而忙碌。如果没有一个有效的 SRM 管理系统&#xff0c;就如同在黑暗中摸索&#xff0c;效…

智联云采 SRM2.0 autologin 身份认证绕过漏洞复现

0x01 产品简介 智联云采是一款针对企业供应链管理难题及智能化转型升级需求而设计的解决方案,针对企业供应链管理难题,及智能化转型升级需求,智联云采依托人工智能、物联网、大数据、云等技术,通过软硬件系统化方案,帮助企业实现供应商关系管理和采购线上化、移动化、智能…

Express与SQLite集成教程:轻松实现数据库操作

Express使用SQLite的教程可以大致分为以下几个步骤。以下是一个详细的指南&#xff0c;帮助你在Express项目中集成SQLite数据库。 1. 安装必要的库 首先&#xff0c;你需要在你的Express项目中安装sqlite3库。打开终端或命令提示符&#xff0c;切换到你的项目目录&#xff0c…