需要学习的知识



多线程基础知识讲解

参考索隆和jim的视频,以及自己做的笔记

导读

为了充分利用CPU资源,人们发明了线程和进程

进程

由来:在单核cpu的时期,为了方便操作把一系列的操作的指令写下来,形成一个清单,一次性的交给计算机,这就是批处理系统。这样有很大的问题,在一个程序I/O操作时,cpu处于闲置状态,这样就浪费了cpu的性能

进程的由来总结:这要从硬件谈起,cpu 内存 硬盘 的速度不一样,而且I/O需要等待会耗费大量的时间,为了能更有效的利用cpu的性能

在I/O等待时执行其他程序。应运而出的产生了进程

进程是资源分配的最小单元,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作是昂贵的。

程序从磁盘读入内存时,就是一个进程。

进程的灵魂就是PCB(进程控制块)

进程 = 程序 + PCB

PCB


Identifer 标识符

state 状态 为了进程调度

priority 优先级

pc 程序计数器

memory pointers 内存指针

context data 上下文数据 上下文就是存放 计算的临时结果(这里会存在多线程安全问题)

I/O status I/O状态

Accountry infomation 记账信息(统计硬件的信息)


线程

线程的由来(也就是有了进程为什么还会有线程):进程在一个时间内,只能干一件事,如果干两件事,那就无能为力了,进程在执行过程中如果有阻塞例如io,他整个进程就会挂起,即使有些进程不依赖于io,也将无法执行。

干两件事 可以用多个进程程解决,这样开销较大 涉及进程间的通信

进程间通信七种方式

管道,消息队列,共享内存,信号量,socket,信号,文件锁

进程让操作系统的并发成为可能,线程让进程内部的并发成为可能

每一个线程的灵魂就是一个TCB

**TCB **


线程id

栈(如同非线程系统上的进程栈,主要存放局部变量)

栈指针

程序计数器

通用目的计数器

条件码(waiting blocked runnable …)

线程和进程区别

1.总体来说线程是进程里的执行单元,同时是一个能够调度的实体

2.进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多

3.线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。不过如何处理好同步与互斥是编写多线程程序的难点。

4.但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间

多线程的底层操作

并发和并行概念

并发(concurrent):同时拥有两个或多个线程,如果程序在单核处理器上运行,多个线程将交替地换入或者换出内存,这些线程是同时“存在“的,每个线程处于执行过程中的某个状态

并行(parallel):如果运行在多核处理器上,此时,程序的每个线程将分配到一个处理器核上,因此可以同时运行。

高并发:是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计能够同时并行处理很多请求

并发基础

cpu多级缓存

cpu缓存的意义

1)时间局部性:如果某个数据被访问,那么在不久的将来他很可能被再次访问

2)空间局部性:如果某个数据被访问,那么与他相邻的数据也可能很快被访问

cpu缓存一致性(MESI)

  • 用于保证cpu cache之间缓存共享数据的一致

cpu多级缓存 - - 乱序执行优化

处理器为了提高运算速度而做出违背代码原有顺序的优化

Java内存模型(Java Memory Model,JMM)

由来:为了屏蔽硬件和操作系统内存访问差异,以实现java程序在各个平台下达到一致的并发效果,jvm规范中定义了JMM

JMM规范了JVM与计算机内存是怎么协作工作的,它规定了线程如何 和 何时看到由其他线程修改过的共享变量的值以及在必须时如何同步的访问共享变量

heap 中的数据是运行时动态分配内存的,比较慢。

stack 栈中的数据大小和周期是有规定的,缺乏灵活性。

引用存在在栈中,对象本身存在堆中。

如果两个线程同时调用同一个对象的同一个方法,他们都要访问这个对象成员变量,每个线程都拥有这个对象的私有拷贝


Java内存模型-同步操作与规则

并发的优势与风险

java多线程学习笔记--一.多线程的基础知识相关推荐

  1. Java之多线程学习笔记五 —— 多线程模拟龟兔赛跑

    Java之多线程学习笔记五 -- 多线程模拟龟兔赛跑 参考教程B站狂神https://www.bilibili.com/video/BV1V4411p7EF package pers.ylw.less ...

  2. JDBC 学习笔记(一)—— 基础知识 + 分页技术

    2019独角兽企业重金招聘Python工程师标准>>> 本文查阅方法:     1.查阅目录 -- 查阅本文目录,确定想要查阅的目录标题     2.快捷"查找" ...

  3. MATLAB学习笔记2:MATLAB基础知识(下)

    阅读前请注意: 1. 该学习笔记是华中师范大学HelloWorld程序设计协会2021年寒假MATLAB培训的学习记录,是基于培训课堂内容的总结归纳.拓展阅读.博客内容由 @K2SO4钾 撰写.编辑, ...

  4. 【Python学习笔记】第一章基础知识:格式化输出,转义字符,变量类型转换,算术运算符,运算符优先级和赋值运算符,逻辑运算符,世界杯案例题目,条件判断if语句,猜拳游戏与三目运算符

    Python学习笔记之[第一章]基础知识 前言: 一.格式化输出 1.基本格式: 2.练习代码: 二.转义字符 1.基本格式: 2.练习代码: 3.输出结果: 三.输入 1.基本格式: 2.练习代码: ...

  5. GDAL学习笔记02:GDAL基础知识

    你的习惯决定了你会成为什么样的人. GDAL学习笔记02:GDAL基础知识 前言 1. 版本 2. 摘要 3. 说明 4. 微信公众号GISRSGeography 一.GDAL简介 二.导入GDAL ...

  6. Python基础教程学习笔记:第一章 基础知识

    Python基础教程 第二版 学习笔记 1.python的每一个语句的后面可以添加分号也可以不添加分号:在一行有多条语句的时候,必须使用分号加以区分 2.查看Python版本号,在Dos窗口中输入&q ...

  7. CSS学习笔记 01、CSS3基础知识学习

    文章目录 前言 CSS3基本了解 如何学习? 一.什么是CSS 1.1.发展史 1.2.快速入门(三种引用方式) 扩展:外部样式两种写法 二.选择器 2.1.基本选择器(标签.类.id) 2.2.元素 ...

  8. JavaSE学习笔记(一)基础知识

    本章包含内容有: java环境配置.注释.标识符.数据类型.类型转换.变量.常量.运算符.包机制.顺序结构.选择结构.循环结构.方法的定义和调用.命令行传参.可变参数. 点击这里查看更多JavaSE的 ...

  9. 【BLE学习笔记】之 BLE基础知识

    前言 很多时候,对于BLE的开发者而言,有90%的时间会用在coding上,从而很容易忽视了BLE硬件相关的知识.小编在下键盘准备敲打内容的时候,在想 "到底要不要花费时间在这占比很小的硬件 ...

最新文章

  1. Linux shell 学习笔记(15)— shell 正则表达式
  2. 使用Pyhthon,OpenCV和ZBar构建移动的条码扫描器
  3. 中国最难考的大学共有31所,分6大梯度,考上毕业很抢手
  4. 字节对齐和C/C++函数调用方式学习总结(多篇节选)
  5. BugKuCTF WEB 本地包含
  6. 面试必会系列 - 1.2 Java 集合,源码讲解
  7. payara 创建 集群_在Payara Server和GlassFish中配置密码
  8. Spark推荐实战系列之Swing算法介绍、实现与在阿里飞猪的实战应用(附代码)
  9. 【linux之bash】
  10. OpenGL学习脚印:深度測试(depth testing)
  11. C#中水晶按钮的程序生成【转载】
  12. maven pom 文件的 scope,scope=system 时打包打不进
  13. 最大似然估计_什么是最大似然估计
  14. 103规约测试软件,Protocoltester(国电南自103规约调试软件)
  15. 小米手机隐私相册在哪?将你的照片锁进“保险柜”
  16. 多传感器融合定位 第十章 基于优化的定位方法
  17. 0CTF2017 WEB WriteUp
  18. 怎样把m4a转换mp3格式?
  19. safari浏览网页打开速度很慢怎样解决
  20. verilog i2c 通用控制模块

热门文章

  1. C++实现批量文件重命名
  2. 主流微服务配置中心对比 config,nacso和Apollo对比
  3. MySQL——超详细数据库触发器教程
  4. 生产者消费者问题——管程法
  5. 湘潭2017 ccpc中南地区邀请赛 Determinant 高斯约当求逆矩阵
  6. 图算法入门4:活动网络-AOE网络和关键路径(critical path)
  7. SSL2811 2017年10月30日提高组T2 摘Galo(树形dp)
  8. 服务器上的服务一直自动关闭,关于服务器老是自动关闭
  9. Android互动直播APP开发入门笔记,吐血整理
  10. 让人春分日 哈工科教100798.宇宙总统