目录: 1、volatile 关键字与内存可见性 什么是内存可见性:当多个线程操作共享数据时,彼此不可见。 demo:测试线程数据没有及时与主内存数据进行同步 package com.oy; public class TestVolatile { public static void main(St ...
分类:
编程语言 时间:
2020-05-05 20:07:39
阅读次数:
67
一、锁 线程为什么要有锁: += 、-= 赋值操作数据不安全(要经过取值、计算、放回值,3部操作) pop 、append 都是数据安全的(只有添加和删除,一次操作) 队列也是数据安全的 1、同步锁 import os, time from threading import Thread def w ...
分类:
编程语言 时间:
2020-04-27 20:59:25
阅读次数:
50
【目录】 一、 threading模块介绍 二 、开启线程的两种方式 三 、在一个进程下开启多个线程与在一个进程下开启多个子进程的区别 四、 线程相关的其他方法 五、守护线程 六、Python GIL(Global Interpreter Lock) 八、同步锁 九、死锁现象与递归锁 一、 thre ...
分类:
编程语言 时间:
2020-04-25 23:41:05
阅读次数:
79
同步锁: multiprocessing 的 Lock() 不加锁:未加锁部分并发执行,加锁部分串行执行,速度慢,数据安全 GIL锁: 线程执行速度快,直接创建, 进程要先创建进程,申请空间。 线程 主程序 进程 垃圾回收 是 线程,干活的。进程是一块内存空间,空间里有主线程,和其它线程。 http ...
分类:
其他好文 时间:
2020-04-24 20:16:04
阅读次数:
71
1 import threading 2 import time 3 4 num = 100 5 def add(): 6 global num 7 s = num 8 time.sleep(0.02) 9 num = s - 1 10 11 l = list() 12 for i in range ...
分类:
其他好文 时间:
2020-04-13 00:22:13
阅读次数:
65
今天三个部分的知识、递归锁(解决同步锁造成的锁死现象)、同步对象(类似一个锁,使两个线程之间进行同步)、信号量(控制线程数量的一个锁),悄悄的说一下,算上昨天的同步锁,虽然已经讲了四种锁了,但是据说总共是有五种锁的,最后一个我还不知道是个啥。 一、递归锁 昨天引入了同步锁的概念,但是因为同步锁的引入 ...
分类:
编程语言 时间:
2020-04-10 00:19:10
阅读次数:
59
首先要知道CAS CAS Compare and Swap,即比较再交换; 区别于synchronouse同步锁的一种乐观锁(是一种无锁算法) CAS有3个操作数, 内存地址,以直接从内存中获取旧值; 旧的预期值A,代码中的旧值; 要修改的新值B 当且仅当预期值A和内存值V相同时,将内存值V修改为B ...
分类:
其他好文 时间:
2020-04-05 09:40:41
阅读次数:
58
1、什么是CAS? CAS:Compare and Swap,即比较再交换。 jdk5增加了并发包java.util.concurrent.*,其下面的类使用CAS算法实现了区别于synchronouse同步锁的一种乐观锁。JDK 5之前Java语言是靠synchronized关键字保证同步的,这是 ...
分类:
其他好文 时间:
2020-03-26 09:28:00
阅读次数:
70
1、什么是JMM Java 内存模型,是一种抽象的概念并不真实存在,它描述的是一组规则或规范; 2、做什么的 通过这组规范定义了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式; 3、怎么玩 3.1 定义线程和主内存之间的抽象关系 线程之间的共享变量存储在主内存(main me ...
分类:
其他好文 时间:
2020-03-25 01:43:17
阅读次数:
65
协程 究竟什么是协程? 究竟协程有什么用? 1.涉及到同步锁。 2.涉及到线程阻塞状态和可运行状态之间的切换。 3.涉及到线程上下文的切换。 以上涉及到的任何一点,都是非常耗费性能的操作。 next()函数用来创建一个协程嗷 yield会暂停,当send()的时候才会继续 python中使用asyn ...
分类:
编程语言 时间:
2020-03-06 23:42:08
阅读次数:
82