Python36 1.joinablequeue 2.线程理论 3.多线程对比多进程 4.线程的使用方式 4.1.产生 线程的两种方式 4.2.守护线程 4.3.线程安全问题 4.3.1.互斥锁 4.3.2.死锁 4.3.3.可重入锁 4.3.4.信号量

复习1.守护进程2.互斥锁(解决数据错乱的方法)3.IPC(进程间通讯)4.生产者与消费者模型

详解:1.守护进程   一个进程可以设为另一个进程的守护进程   特点:被守护的进程结束时,守护进程也会随之结束   本质:父进程交给子进程一个任务,然而父进程 先于子进程结束了,子进程的任务也就没有必要 继续执行了   格式:开始前加  p.daemon=True

2.互斥锁(解决数据错乱的方法)方法一:互斥锁   互斥 互相排斥   锁的本质:一个标志   标志的两个状态:                 1.锁定                  2.未锁定   什么时候用?      当多个进程要操作同一个资源时,就会造成数据错乱,通常将1.写入操作加锁  2.读取操作不需加   锁的作用:(优缺点)       (缺点:)加锁会把原本并发的任务,修改为串行,降低了效率 (优点:)保证了数据的安全性,锁可以指定一部分代码串行,其他仍然并发    重点考虑问题:加锁的位置    注意:        1.要保证安全必须保证大家用的是同一把锁        2.不能对一把锁连续执行acquire,将会导致死锁方法二:  join  本质:  1.join也可以将任务变为串行     2.join固定任务的执行顺序  3.join会使得子进程的代码全部串行,并且主进程也会阻塞住

3.IPC     进程间通讯:       1.管道(subprocess)              单向通讯,传输的是二进制       2.共享文件(with open()as f)             数据量几乎不受限制,但是速度慢       3.共享内存(1.Manager2.Queue)             数据量较小 但是速度快       4. socket("服务器","客户端")             编程复杂 ,传输的是二进制

   最主要的内容就是共享内存:       1.Manager()类  了解       2.Queue队列 (q=Queue()) 必须掌握的方法       是一种数据容器,       特点:先进先出,并且进程中的队列 可以共享数据,自带锁机制

4.生产者消费者模型    要解决的问题:生产者与消费者能力不平衡,导致效率低    如何解决?        1.把生产者和消费者分开耦合,即把任务分到不同进程中 各司其职        2.分开后,由于进程间相互隔离,所以需要一个共享容器,Queue 闪亮登场             (1.解决了数据交换问题2.锁的问题)
今日内容1.joinablequeue2.线程理论3.多线程对比多进程4.线程的使用方式--1.产生 线程的两种方式--2.守护线程--3.线程安全问题----1.互斥锁----2.死锁----3.可重入锁----4.信号量

原文地址:https://www.cnblogs.com/llx--20190411/p/10974050.html

时间: 2024-07-28 23:33:00

Python36 1.joinablequeue 2.线程理论 3.多线程对比多进程 4.线程的使用方式 4.1.产生 线程的两种方式 4.2.守护线程 4.3.线程安全问题 4.3.1.互斥锁 4.3.2.死锁 4.3.3.可重入锁 4.3.4.信号量的相关文章

Java 中15种锁的介绍:公平锁,可重入锁,独享锁,互斥锁,乐观锁,分段锁,自旋锁等等(转)

Java 中15种锁的介绍 在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类.介绍的内容如下: 公平锁 / 非公平锁 可重入锁 / 不可重入锁 独享锁 / 共享锁 互斥锁 / 读写锁 乐观锁 / 悲观锁 分段锁 偏向锁 / 轻量级锁 / 重量级锁 自旋锁 上面是很多锁的名词,这些分类并不是全是指锁的状态,有的指锁的特性,有的指锁的设计,下面总结的内容是对每个锁的名词进行一定的解释. 公平锁 / 非公平锁 公平锁 公平锁是指多个线程按照申请锁的顺序来获取锁. 非公

聊聊高并发(二十七)解析java.util.concurrent各个组件(九) 理解ReentrantLock可重入锁

这篇讲讲ReentrantLock可重入锁,JUC里提供的可重入锁是基于AQS实现的阻塞式可重入锁.这篇 聊聊高并发(十六)实现一个简单的可重入锁 模拟了可重入锁的实现.可重入锁的特点是: 1. 是互斥锁,基于AQS的互斥模式实现,也就是说同时只有一个线程进入临界区,唤醒下一个线程时也只能释放一个等待线程 2. 可重入,通过设置了一个字段exclusiveOwnerThread来标示当前获得锁的线程.获取锁操作是,如果当前线程是已经获得锁的线程,那么获取操作成功.把当前状态作为获得锁次数的计数器

浅谈Java中的锁:Synchronized、重入锁、读写锁

Java开发必须要掌握的知识点就包括如何使用锁在多线程的环境下控制对资源的访问限制 ◆ Synchronized ◆ 首先我们来看一段简单的代码: 12345678910111213141516171819 public class NotSyncDemo { public static int i=0; static class ThreadDemo extends Thread { @Override public void run() { for (int j=0;j<10000;j++)

可重入锁和不可重入锁

锁的简单应用 用lock来保证原子性(this.count++这段代码称为临界区) 什么是原子性,就是不可分,从头执行到尾,不能被其他线程同时执行. 可通过CAS来实现原子操作 CAS(Compare and Swap): CAS操作需要输入两个数值,一个旧值(期望操作前的值)和一个新值,在操作期间先比较下旧值有没有发生变化,如果没有发生变化,才交换成新值,发生了变化则不交换. CAS主要通过compareAndSwapXXX()方法来实现,而这个方法的实现需要涉及底层的unsafe类 unsa

06 锁:可重入锁 公平锁 读写锁

1.可重入锁 如果锁具备可重入性,则称作为可重入锁. 像synchronized和ReentrantLock都是可重入锁,可重入性在我看来实际上表明了锁的分配机制: 基于线程的分配,而不是基于方法调用的分配. 举个简单的例子,当一个线程执行到某个synchronized方法时,比如说method1,而在method1中会调用另外一个synchronized方法method2, 此时线程不必重新去申请锁,而是可以直接执行方法method2. class MyClass { public synch

36 线程 队列 守护线程 互斥锁 死锁 可重入锁 信号量

线程 线程是操作系统最小的运算调度单位,被包含在进程中,一个线程就是一个固定的 执行流程 线程和进程的关系 线程不能单独存在 必须存在于进程中, 进程是一个资源单位,其包含了运行程序所需的所有资源 线程才是真正的执行单位 没有线程,进程中的资源无法被利用起来,所以一个进程至少包含一个线程,称之为主线程 当我们启动一个程序时,操作系统就会自己为这个程序创建一个主线程 线程可以由程序后期开启 ,自己开启线程称之为子线程 为什么需要线程 目的只有一个就是提高效率 就像一个车间 如果产量跟不上 就再造一

python多线程编程(3): 死锁和可重入锁

死锁 在线程间共享多个资源的时候,如果两个线程分别占有一部分资源并且同时等待对方的资源,就会造成死锁.尽管死锁很少发生,但一旦发生就会造成应用的停止响应.下面看一个死锁的例子: 按 Ctrl+C 复制代码 按 Ctrl+C 复制代码 执行结果: Thread-1 got resAThread-1 got resBThread-1 got resBThread-1 got resAThread-2 got resAThread-2 got resBThread-2 got resBThread-2

Java多线程可重入锁例子解析

"可重入锁"的概念是:自己可以再次获得自己的内部锁.比如有一条线程获得了某个对象的锁,此时这个对象还没有释放,当其再次想获得这个对象的锁的时候还是可以获得的,如果不可锁重入的话,就会造成死锁. class sysTest{ synchronized void test1(String str){ System.out.println(str+"1"); test2(str); System.out.println("end" + str); }

Java 多线程 重入锁

作为关键字synchronized的替代品(或者说是增强版),重入锁是synchronized的功能扩展.在JDK 1.5的早期版本中,重入锁的性能远远好于synchronized,但从JDK 1.6开始,JDK优化了synchronized,使两者性能差距不大.重入锁使用java.util.concurrent.locks.ReentrantLock类来实现. 使用重入锁可以指定何时加锁和何时释放锁,对逻辑控制的灵活性远远好于synchronized,退出临界区时必须释放锁.之所以称为重入锁,