一、Executors 线程池创建工具【1】
1、Executors.newCachedThreadPool();说明: 创建的线程池核心线程0 , 最大线程是Integer.MaxValue。 线程空闲存活时间1分钟。 默认异常拒绝策略,使用SynchronousQueue队
特点:每次添加任务如果没有空闲线程就会新建一个线程去执行。 SynchronousQueue是阻塞队列,加入任务的线程会阻塞住,直到其它线程从中取走任务才会结束阻塞 线程创建上限近乎无限
适用场景:所以它适用于任务加入比...
并发编程 -- 多线程底层运行原理、线程状态
作者 : Stanley 罗昊
多线程 -- 并发编程(一) : https://www.cnblogs.com/StanleyBlogs/p/10890906.html
【转载请注明出处和署名,谢谢!】
多线程底层执行原理
说道底层运行,那么是不是就是需要依靠CPU啊;
那,各位之前有没有听过一句话叫做,一个CPU在同一个时间片只能执行一个程序;
什么意思呢?
就是,你的程序是不是都运行在一个CPU上啊,那你真正一个CPU在同一个时间片里是...
原文: http://blog.gqylpy.com/gqy/236
目录
1.操作系统背景知识
2.什么是进程
3.进程调度
4.进程的并行与并发
5.同步异步阻塞非阻塞
6.进程的创建与结束
1.操作系统背景知识
顾名思义,进程即正在执行的一个过程,进程是对正在运行的程序的一个抽象。进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老的最重要的抽象概念之一,操作系统的其他所有内容都是围绕进程的概念展开的。
所以想要真正了解...
本人免费整理了Java高级资料,涵盖了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高并发分布式等教程,一共30G,需要自己领取。传送门:https://mp.weixin.qq.com/s/JzddfH-7yNudmkjT0IRL8Q一直以来并发编程对于刚入行的小白来说总是觉得高深莫测,于是乎,就诞生了想写点东西记录下,以提升理解和堆并发编程的认知。为什么需要用的并发?凡事总有好坏两面,之间的trade-off是什么,也就是说并发编程具有哪些缺点...
8锁现象
在并发编程中,一直在谈论锁,但是锁到底是什么呢?它锁的是什么?
首先看下以下8个问题1、一部手机,两个线程,标准访问,请问先打印邮件还是短信?
2、邮件方法暂停4秒钟,请问先打印邮件还是短信?
3、新增一个普通方法hello()没有同步,请问先打印邮件还是hello?
4、两部手机、请问先打印邮件还是短信?
5、两个静态同步方法,同一部手机,请问先打印邮件还是短信?
6、两个静态同步方法,2部手机,请问先打印邮件还是...
核心:基于资源状态的调度方式的控制权问题:有锁无锁调度
线程:基于内核的锁调度;
其它:应用层自我调度;
并发编程 在过去的30年里,计算机的性能是在摩尔定律的推动下,从现在开始,这将由Amdahl定律决定。编写代码,有效地利用多个处理器可以是非常具有挑战性的。" -Doron Rajwan
Amdahls Law:每个程序都分为串行与并行部分,降低串行的比重,可提高程序的效率。 进行多核多服务器时代,并行并发模式更是对程序员的...
说到多线程带来的风险,首先要了解一个概念-临界区。什么是临界区?临界区是用来表示一种公共的资源(共享数据),它可以被多个线程使用,但是在每次只能有一个线程能够使用它,当临界区资源正在被一个线程使用时,其他的线程就只能等待当前线程执行完之后才能使用该临界区资源。比如一台饮水机,比如办公室办公室里有一支笔,它一次只能被一个人使用,假如它正在被甲使用时,其他想要使用这支笔的人只能等甲使用完这支笔之后才能允...
文章目录
1.ThreadLocal的实现1.1.创建1.2.初始化1.3.移除1.4.存储结构图示1.5.小结
2.ThreadLocalMap的实现2.1.Entry的结构2.1.1.为什么key要使用弱引用2.1.2.为什么value不使用弱引用
2.2.Entry初始化2.2.1.模拟魔数的使用2.2.2.ThreadLocal是如何使用魔数的2.2.3.数组下标出现重复的情况
2.3.set()方法2.3.1.set()方法源码解析2.3.1.1.开放寻址法——解决Hash冲突
2.3.2.扩容
2.4.get()方法2.5.remove()方法
3.总结
1.ThreadLoc...
1 JMM
1对Volatile 的理解
Volatile 是 Java 虚拟机提供 轻量级的同步机制 1、保证可见性 2、不保证原子性 3、禁止指令重排
如何实现可见性 volatile变量修饰的共享变量在进行写操作的时候回多出一行汇编: 0x01a3de1d:movb $00,01104800(%esi);0x01a3de24**:lock** addl $00,(%esp); Lock前缀的指令在多核处理器下会引发两件事情。 1)将当前处理器缓存行的数据写回到系统内存。 2)这个写回内存的操作会使其他cpu里缓存了该内...
并发编程之GIL锁
1.定义
? GIL(Global_Interpreter_Lock)全局解释器锁:
? 在cpython中,GIL是一个互斥锁,为了防止多个本地线程在同一时间执行python字节码,因为cpython中的内存管理是非线程安全的,而cpython中的很多特性都依赖于这个特性.
2.cpython解释器与python程序之间的关系python程序本质就是一堆字符串,所以运行一个python程序时 必须要开启开启一个解释器
但是在一个python程序中解释器只有一个 所有代码都要交给它来解释执...
最近几年,并发编程已经慢慢成为了一项必备技能。高薪岗位面试必问,并发编程似乎已经成为大厂必备的敲门砖。
这主要是硬件的驱动以及国内互联网行业的飞速发展决定的,现在 64 核的服务器已经飞入寻常百姓家,大型互联网厂商的系统并发量轻松过百万,传统的中间件和数据库已经不能为我们遮风挡雨,反而成了瓶颈所在。
于是,并发编程成为近年非常热门的领域,人才稀缺。但与此同时,关于并发编程的书籍也渐渐丰富起来了,庞杂而且...
原贴:
https://www.cnblogs.com/gbq-dog/p/10375713.html
今天学习了并发编程中的最后一部分,协程,也是python中区别于java,c等语言中很大不同的一部分
1.协程产生的背景
2.协程的概念
3.yield模拟协程
4.协程中主要的俩个模块
5.协程的应用
开始今日份总结
1.协程产生的背景之前我们学习了线程、进程的概念,了解了在操作系统中进程是资源分配的最小单位,线程是CPU调度的最小单位。按道理来说我们已经算是把cpu的利用率提高很...
并发与并行
并发:多个进程交替执行。
并行:多个进程同时进行,不存在线程的上下文切换。
并发与并行的目的都是使CPU的利用率达到最大。Fork/Join就是为了尽可能提高硬件的使用率而应运而生的。
计算密集型与IO密集型
计算密集型:也称之为CPU密集型,此时系统的硬盘,内存性能相对于CPU要很多。系统在运作的时候CPU是处于100% loading的状态,在系统完成磁盘的读写(I/O)以后,程序就会进行计算,在进行计算的时候CPU占用率是很高...
一、互斥锁
多进程中数据不安全,所以要加锁。
多线程虽然有GIL锁,但是由于GIL锁轮转的策略(多线程之间时间片的轮转),仍存在数据不安全的情况,但是相对几率较低。
GIL锁轮转的策略:早期执行700条指令(不是700行,+= 操作相当于4条指令),现在是执行一个时间片时间,当前线程会让出cpu给其他线程使用。
dis模块中的方法可以查看某个操作对应的cpu指令
解决线程之间的数据安全的问题:
①多线程中,不在线程中操作全局变量...
提到并发编程,最基础的概念就是搞明白什么是进程和线程了,关于这两个概念,可以参考我之前写的文章:
什么是进程和线程
CPU 核心数和线程数的关系
多核心:也指单芯片多处理器( Chip Multiprocessors,简称 CMP),CMP 是由美国 斯坦福大学提出的,其思想是将大规模并行处理器中的 SMP(对称多处理器)集成 到同一芯片内,各个处理器并行执行不同的进程。这种依靠多个 CPU 同时并行地 运行程序是实现超高速计算的一个重要方向,称为并行处理...