并发编程核心——一基本概念

主要内容(镇楼!)
1.常见高并发基础:synchronized、volatile、happens-before、CAS、ThreadPoolExecutor、Executor、ThreadLocal、Condition、Semaphore;
2.经典并发工具:automic、ABA、ReentrantLock、ReadWriteLock、Adder、Accumulator、 StampedLock、CopyOnWriteArrayList、ConcurrentHashMap、CopyOnWriteArraySet、FutureTask、Fork/Join、BlockingQueue;
3.核心并发模式:Immutability、Copy-on-Write、GuardSuspension 、Balking、Thread-Per-Message、WorkerThread;
4.并发编程框架:HikariCP、Netty、Akka、 Amino等。
Java并发编程核心
一.基本概念
1.1什么是进程?
如果你是windows系统,打开任务管理器,查看。
并发编程核心——一基本概念_第1张图片并发编程核心——一基本概念_第2张图片
并发编程核心——一基本概念_第3张图片
大学里面用c++写的程序,经过编译器编译为exe文件,这些可以被windows操作系统执行。当被执行,这就是一个进程。一个运行中的exe文档!

两个程序,都包含输入输出操作(用到内存 外设),其他操作(cpu 内存)
单核cpu 单道,先执行 a上部分 a的输入输出部分 a下部分,再执行b的上部分 b的输入输出部分 b下部分
单核cpu 多道,先执行 a 上部分 a的输入输出部分
b的上部分 b的输入输出部分
a的下部分 b的下部分
也就是
并发编程核心——一基本概念_第4张图片
并发编程核心——一基本概念_第5张图片
保存a运行的状态,切换到b,保存b的状态,切换到上次a的状态,重新开始b的状态.
抽象成概念:进程。
1.2进程和程序的区别
程序是程序,进程是进程,程序不运行,永远不是进程
程序:一堆代码
进程:程序运行的过程(小的资源集)
进程即程序(软件)在一个数据集上的一次动态执行过程。进程是对正在运行程序的一个抽象。进程一般由程序、数据集、进程控制块三部分组成。一个进程是一份独立的内存空间,多个进程间用户程序无法互相操作。

程序:我们编写的程序用来描述进程要完成哪些功能以及如何完成
数据集:是程序执行过程中所需要使用的资源
进程控制块:用来记录进程的外部特征,描述晋城的执行变化过程,系统可以利用它来控制和管理进程,他是系统感知进程存在的唯一标志。
1.3什么是线程?
**进程只是用来把资源集中到一起(进程只是一个资源单位,或者资源集合),而线程才是CPU上的执行单位。**在操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程(主线程)。多线程就是多个控制线程,概念是,在一个进程中存在多个控制线程,多个控制线程共享该进程的地址空间。线程不能单独存在,只能依附于进程中。一个线程可以创建和撤销另一个线程(子线程),同一个进程中的多个线程之间可以并发执行。
1.4并发和并行
1.4.1并发(串行)
并发编程核心——一基本概念_第6张图片
并发:系统具有处理多个任务的能力
并行:系统具有同时处理多个任务的能力
并行一定是并发,并发不一定是并行

1.4.2并行
1.5同步和异步
1.5.1同步
所有操作都做完,才返回给用户,这样用户在线等待的时间太长,给用户一种卡死的感觉。这种情况下,用户不能关闭界面, 如果关闭了,即迁移程序就中断了。
并发编程核心——一基本概念_第7张图片
1.5.2异步
将用户请求放入消息队列,并反馈给用户友好提示,系统迁移程序启动,你可以关闭浏览器了。然后程序在慢慢地去写入数据库去。这就是异步。用户没有卡死的感觉。
1.5.3总结
同步,是所有操作都做完,才返回给用户结果。即写完数据库之后,在响应用户,用户体验不好。
异步,不用等所有操作都做完,就响应用户请求。即先响应用户请求,然后慢慢去写数据库,用户体验较好。
并发编程核心——一基本概念_第8张图片
为了避免短时间大量的数据库操作,可以使用缓冲机制,也就是消息队列。现将数据放入消息队列,然后再慢慢写入数据库。
引入消息队列机制,对然可以保护用户请求的快速响应,但是并没有是的我数据迁移的时间变短,即80万数据写入mysql要一小时,用了缓冲机制,还是要1小时。只是保证用户请求的快速响应,用户输入完http url请求后,就可以吧浏览器关闭了,干别的去了。如果不用缓冲机制,浏览器不能关闭,
同步就没价值了吗?
有。比如银行的转账功能,打电话等。
1.6面试题:有了进程为什么还需要线程?
进程的开销是线程的30倍左右
并发编程核心——一基本概念_第9张图片
并发编程核心——一基本概念_第10张图片
在这里插入图片描述

你可能感兴趣的:(高并发学习笔记)