多线程_JUC原子类
JUC原子类根据修改的数据类型,可以将JUC包中的原子操作类可以分为4类。
基本类型: AtomicInteger, AtomicLong, AtomicBoolean ;数组类型: AtomicIntegerArray, AtomicLongArray, AtomicReferenceArray ;引用类型: AtomicReference, AtomicStampedRerence, AtomicMarkableReference ;对象的属性修改类型: AtomicIntegerFieldUpdater, AtomicLongFieldUpdater, AtomicReferenceFieldUpdater 。
这些类存在的目的是对相应的数据进行原子操作。所谓原子操作,是指操作过程不会被中断,保证数据操作是以原子方式进行的。
AtomicLong介绍和函数列表AtomicLong是作用是对长整形进行原子操作。在32位操作系统中,64位的long 和 double 变量由于会被JVM当作两个分离的32位来进行操作,所以不具有原子性。而使用AtomicLong能让long的操作保持 ...
多线程_锁
锁概念锁的分类
如何理解互斥锁、条件锁、读写锁以及自旋锁?
5000字 | 24张图带你彻底理解21种并发锁
互斥锁和自旋锁互斥锁和自旋锁是最底层的两种锁,其他的很多锁都是基于他们的实现。
当线程A获取到锁后,线程B再去获取锁,有两种处理方式:
线程B循环的去尝试获取锁,直到获取成功为止即自旋锁
线程B放弃获取锁,在锁空闲时,等待被唤醒,即互斥锁
互斥锁
互斥锁会释放当前线程的cpu,导致加锁的代码阻塞,直到线程再次被唤醒。互斥锁加锁失败时,会从用户态陷入到内核态,让内核帮我们切换线程,存在一定的性能开销
1while (抢锁(lock) == 没抢到) {睡眠直到锁状态改变再唤醒(lock)}
当线程加锁失败,内核会把线程的状态由“运行”设置为“睡眠”,让出cpu
当锁空闲时,内核唤醒线程,状态设置为“就绪”,获取cpu执行
自旋锁
自旋锁会自用户态由应用程序完成,不涉及用户态到内核态的转化,没有线程上下文切换,性能相对较好,自旋锁加锁过程:
1while (抢锁(lock) == 没抢到) {}
查看锁的状态
锁空闲, ...
枚举类Enum
枚举类Enum枚举类有哪些好处
枚举类可以方便地表示星期,月份等常数类型,如果你不用枚举类,那么你只能用数字或者字符串。如果你使用数字,用1-7来表示星期数,但一个数字在程序中不仅可以表示星期数,可能还有其他许多含义,这样你在写程序时就必须时刻记住这些数字的含义,这降低了程序的可读性,也导致容易出错。而当你使用字符串时,虽然没有明显的缺点,但在内存中字符串所占内存要比数字多,这就降低了程序的效率。
枚举类正好弥补了这两方面的缺点,你可以在代码中使用枚举类,但在内存中存放时使用的是数字,既提高了可读性,又提高了程序效率。更重要的是,Python中的枚举类型是不可变类型,又可以进行迭代,这就意味着你可以随时使用枚举类型而不用担心改变了枚举类型的值。
两种枚举类定义方式
程序有两种方式来定义枚举类:
直接使用 Enum 列出多个枚举值来创建枚举类。
通过继承 Enum 基类来派生枚举类。
案例简单枚举类定义12345678# 由于枚举类的“new”方法,将会保证内存中只会存在一个枚举类的实例# -*- coding: utf-8 -*from enum import Enum# 这 ...
pandas小记
pandas学习
numpy小记
numpy小记
70个NumPy分级练习题:用Python一举搞定机器学习矩阵运算
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556import numpy as np# 1. 替换满足条件的元素而不影响原始数组arr = np.arange(10)out = np.where(arr%2==1, -1, arr)arrOut[4]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])outOut[5]: array([ 0, -1, 2, -1, 4, -1, 6, -1, 8, -1])# 7. 获取两个数组元素匹配的索引号a = np.array([1,2,3,2,3,4,3,4,5,6])b = np.array([7,2,10,2,7,4,9,4,9,8])np.where(a==b)Out[33]: (array([1, 3, 5, 7], dtype=int64),) # 9. 将处 ...
python_pipe包管道包学习
python pipe包管道包学习
参考: https://github.com/JulienPalard/Pipe
1234567891011121314151617181920212223242526from pipe import *# 此处不是太理解[1, 2, 3, 4, 5] | tee | as_list12345Out[32]: [1, 2, 3, 4, 5]# 将生成器转换成list列表[1, 2, 3, 4, 5, 6] | as_listOut[34]: [1, 2, 3, 4, 5, 6] # Like Python's built-in "reversed" primitive.[1, 2, 3] | reverse | concatOut[52]: '3, 2, 1' # Returns index of value in iterable 检索值# 输入value start stop[1,2,3,2,1] | index(value=2,start=2,stop=4)Out[53]: 3[ ...
Python增强提案PEP
Python 增强提案PEP
Python中10个必读的PEP提案
理解Python数据类:Dataclass 的特征概述 (上)
理解Python数据类:Dataclass fields 的概述(下)
Python3.7 dataclass使用指南小结
PEP 是 Python 增强提案(Python Enhancement Proposal)的缩写。社区通过PEP来给 Python 语言建言献策,每个版本你所看到的新特性和一些变化都是通过PEP提案经过社区决策层讨论、投票决议的。
PEP 557 数据类(data class)
dataclass的定义位于PEP-557,根据定义一个dataclass是指“一个带有默认值的可变的namedtuple”,广义的定义就是有一个类,它的属性均可公开访问,可以带有默认值并能被修改,而且类中含有与这些属性相关的类方法,那么这个类就可以称为dataclass,再通俗点讲,dataclass就是一个含有数据及操作数据方法的容器。
Dataclasses 是一些适合于存储数据对象(data object)的 Python ...
python多线程
python多线程
Python多线程学习
多线程用比较少