全网第一篇教你怎么总结多线程知识

于「全景图」,我之前也有一直在构建,可是因为知识储备不够,确实很难构建出来。稍微了解过并发领域知识的人都知道,里面的知识点、概念多而散:线程安全、锁、同步、异步、阻塞、非阻塞、死锁、队列(为什么并发要跟队列扯上关系)、闭锁、信号量、活锁等等。如果单个去学这些知识点,单个去练习,如果没有 「主线」,后期很容易忘。我思考再思考,也总结了一下学习并发的主线:

首先,得理解并发的重要性,为什么需要并发?对于这个问题,只需要放在潜意识里面,只需要两个字:性能!其它的细节,再去慢慢拓展。然后,既然并发很重要,而并发处理的是任务,接下就是:对任务的抽象、拆解、分工执行。而线程模型,只是其中的一种模型,还有多进程、协程。Java使用的是多线程模型:对应到具体的代码就是:Thread, Runnable, Task,执行任务有:Exectors。 引出了线程,有势必存在着线程安全性的问题,因为多线程访问,数据存在着不一致的问题。再然后,大的任务被拆解多个小的子任务,小的子任务被各自执行,不难想象,子任务之间肯定存在着依赖关系,所以需要协调,那如何协调呢? 也不难想到,锁是非常直接的方
式(Monitor原理),但是只用锁,协调的费力度太高,在并发的世界里面,又有了一些其它的更抽象的工具:闭锁、屏障、队列以及其它的一些并发容器等;好了,协调的工作不难处理了。可是协调也会有出错的时候,这就有了死锁、活锁等问题,大师围绕着这个问题继续优化协调工具,尽量让使用者不容易出现这些活跃性问题;到此,「并发」的历史还在演化:如果一遇到并发问题,就直接上锁,倒也没有什么大问题,可是追求性能是人类的天性。计算机大师就在思考,能不不加锁也能实现并发,还不容易出错,于是就有了:CAS、copy-on-write等技术思想,这就是实现了 「无锁」并发;可是,事情到此还没有完。如果以上这些个东西,都需要每个程序员自己去弄,然后自己保证正确性,那程序员真累死了,哪还有时间、精力创造这么多美好的应用!于是,计算
机大师又开始思考,能不能抽象出统一模型,可能这就是类似于java内存模型 这样的东西。

总结:(分工、同步、互斥)同步和互斥基本都是用的是管程模型

  1. 为什么要并发或者多线程,目的是为了挤占cpu,让cpu不能闲着
  2. 并发就是多任务处理,对于任务的抽象、拆解对于java而言就是多线程模型,因为一个任务就是一个线程嘛,对应要具体代码就是Runnable、Thread、Task之类的。执行任务的是Executors
  3. java是平台无关的,所以对应的搞了一套java内存模型,即每个线程都有自己的工作内存。当然,这里屏蔽了很多细节,包括cpu缓存、寄存器等等。
  4. 一个大的任务拆成小的任务(分工),如果各个小任务之间没有依赖,那还好,只是简单的分工,提高效率。
  5. 如果说多个任务存在执行依赖,就需要协调(同步)。协调最简单就是不满足条件的时候挂起,满足条件的时候唤醒。
  6. 如果说多个任务存在数据依赖(有共享数据),就会存在线程安全的问题。从计算机底层的视角来看,线程不安全的本质来自于可见性(cpu缓存)、原子性(线程切换)、有序性(各种重排序),那就要解决这些问题,所以java提供很多关键字(sync、final、volatile)来解决,sync表面看起来好像实现的是互斥,其实从计算机底层来看,它也是利用内存屏障来解决可见效、有序性底层问题,用锁来实现原子性
  7. 执行依赖和数据依赖都可以用管程模型解决,阻塞队列+等待队列。
  8. 但是,锁的性能不高,计算大师又想利用无锁的思想来进一步提供性能。

自己总结的并发思维导图:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/311611.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV4.x(C++)人脸检测(眼睛、侧脸、正脸)

一、前言 OpenCV是一款广泛使用的计算机视觉库,提供了许多强大的功能,包括人脸检测和识别。人脸分类器是OpenCV中用于人脸检测的关键工具之一,能够快速准确地检测出图像中的人脸。 本文将介绍如何使用OpenCV自带的人脸分类器,并…

SpringBoot中使用SpringEvent业务解耦神器实现监听发布事件同步异步执行任务

场景 SpringBoot中使用单例模式ScheduledExecutorService实现异步多线程任务(若依源码学习): SpringBoot中使用单例模式ScheduledExecutorService实现异步多线程任务(若依源码学习)-CSDN博客 设计模式-观察者模式在Java中的使用示例-环境监测系统: 设…

win7添加access的odbc数据源

从控制面板打开odbc数据源;如果像下面没有access的驱动程序, 根据资料,打开C盘-Windows-SysWow64-odbcad32.exe,看一下就有了; 然后添加用户DSN,选中access的驱动程序, 自己输入一个数据源名&am…

北斗卫星助力智慧公园实现智能化管理

北斗卫星助力智慧公园实现智能化管理 智慧公园是以信息技术为核心,以人工智能为驱动,运用物联网技术对公园进行智能化管理和服务的创新模式。而北斗卫星系统的应用,为智慧公园提供了更强大的支持和保障。下面我们来详细了解一下北斗卫星在智…

【c++】list迭代器失效问题

目录 一、list iterator的使用 二、list的迭代器失效 一、list iterator的使用 对于list的迭代器的用法,可以将它看做一个指针(实际要更加复杂)来使用,该指针指向list中的一个节点。 【注意】 (1)begin和end为正向迭代器&#x…

MobaXterm游戏讲解

前言 没想到吧,这里还有游戏,以下是玩法 玩法 注 点击Type可以自由更改地图大小 1.Netwalk 这个游戏是用鼠标点击每一个格子,进行旋转方向,使得所有方块连接接来,全部变成亮蓝色 2.Mines 这个就是扫雷了&#xff…

Python学习从0到1 day1 你好 Python

我会在那腥臭腐朽的日子里熠熠生辉 ——24.1.11 1.第一个Python程序 安装python程序,输出第一个程序:你好,世界 print("Hello World"); 2.Python解释器 python解释器,是一个计算机程序,用来翻译python代码,并提交给计算机执行 功能:1.翻译代码 2.提交给计算机…

ssm+vue的城投公司企业人事管理系统设计与实现(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频: ssmvue的城投公司企业人事管理系统设计与实现(有报告)。Javaee项目,ssm vue前后端分离项目。 项目介绍: 采用M(model)V(view)C(controller&#x…

从聚水潭到金蝶云星空通过接口配置打通数据

从聚水潭到金蝶云星空通过接口配置打通数据 对接系统:聚水潭 聚水潭SaaSERP于2014年4月上线,目前累计超过2.5万商家注册使用,成为淘宝应用服务市场ERP类目商家数和商家月订单增速最快的ERP。2014年及2015年“双十一”当天,聚水潭S…

如何利用ChatGPT快速生成月报?

随着每个月的结束,个人和团队经常需要编写月报来回顾和总结。这项任务通常消耗大量时间和精力。幸运的是,借助ChatGPT,这个过程可以变得更加简单和高效。接下来,我将详细介绍如何利用ChatGPT快速生成月报,从而帮助你节…

一个完整的流程表单流转

1.写在前面 一个完整的流程表单审批(起表单-->各环节审批-->回退-->重新审批-->完成),前端由Vue2jsElement UI升级为Vue3tsElement Plus,后端流程框架使用Flowable,项目参考了ruoyi-vue-pro(https://gite…

程序员有哪些接单的渠道?

这题我会!程序员接单的渠道那可太多了,想要接到合适的单子,筛选一个合适的平台很重要。如果你也在寻找一个合适的接单渠道,可以参考以下这些方向。 首先,程序员要对接单有一个基本的概念:接单渠道可以先粗略…

pandas笔记:找出在一个dataframe但不在另一个中的index

1 问题描述 假设我们有两个dataframe(这一段代码)来自transbigdata 笔记:官方文档案例1(出租车GPS数据处理)-CSDN博客 data tbd.clean_outofshape(data, sz, col[Lng, Lat], accuracy500) data data2 tbd.clean_ta…

科研学习|论文解读——信息世界映射方法

题目:信息世界映射的下一步是什么?在情境中理解信息行为/实践的国际化和多学科方法(What is next for information world mapping? International and multidisciplinary approaches to understanding information behaviors/ practices in …

6.2 声音编辑工具GoldWave5简介(2)

6.2.2转换声音格式 GoldWave5支持多种声音格式,它不但可以编辑扩展名是wav、mp3、au、voc等格式的声音文件,还可以编辑Apple电脑所使用的声音文件;并且GoldWave5还可以把Matlab中的mat文件当作声音文件来处理。利用这些功能可以很容易进行声…

深度学习笔记(三)——NN网络基础概念(神经元模型,梯度下降,反向传播,张量处理)

文中程序以Tensorflow-2.6.0为例 部分概念包含笔者个人理解,如有遗漏或错误,欢迎评论或私信指正。 截图部分引用自北京大学机器学习公开课 人工智能算法的主流分类 首先明白一个概念,广义上的人工智能算法并不是只有Machine Learning或Deep …

Maven和MyBatis框架简单实现数据库交互

MyBatis是一种基于Java语言的持久层框架,它的主要目的是简化与数据库的交互过程。MyBatis通过XML或注解配置来映射Java对象和数据库表之间的关系,并提供了灵活的查询方式和结果集处理机制。MyBatis还提供了事务管理、缓存机制、插件扩展等特性。 使用My…

关于httpClient 使用的注意事项

关于httpClient 使用的注意事项 用例 PoolingHttpClientConnectionManager connectionManager new PoolingHttpClientConnectionManager();// 最大连接数-不设置默认20connectionManager.setMaxTotal(200);// 每个路由最大连接数-不设置默认2connectionManager.setDefaultMax…

深度解析Java中的ReadWriteLock:高效处理并发读写操作

第1章:引言 大家好,我是小黑,今天咱们聊聊读写锁。当多个线程同时对同一数据进行读写操作时,如果没有合理的管理,那数据就乱套了。就好比小黑在写日记,突然来了一帮朋友,大家都想往日记本上写点…

linux 网络基础配置

将Linux主机接入到网络,需要配置网络相关设置一般包括如下内容: 主机名 iP/netmask (ip地址,网关) 路由:默认网关 网络连接状态 DNS服务器 (主DNS服务器 次DNS服务器 第三个DNS服务器) 一、…