IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 并发和并行以及线程安全 -> 正文阅读

[Java知识库]并发和并行以及线程安全

目录

并发

并行

?同步和异步

?threading模块实现多线程.

创建线程:

????????threading.Thread(target=func)

? ? ? ? *参数target指定线程执行的任务(函数)

注意:在做平台开发的时候,对象若不会再调用,可用"del"方法手动回收,节省内存空间.

?线程安全---多线程共享全局变量:

? ? ? ? 线程之间是共用同一内存的,那么线程可以共享全局变量

? ? ? ? 如何解决此类问题?控制线程,避免同时获取数据.

? ? ? ? ? ? ? ? 同步&互斥锁.

threading模块中定义了Lock类,可以方便地处理锁定:

? ? ? ? #创建锁:

mutex=threading.Lock()

? ? ? ? #锁定:上锁原则---->哪里需要锁,锁就上哪里

mutex.acquire()

? ? ? ? #释放:

mutex.release()


并发

并发:指的是任务数>CPU核数,通过操作系统的各种任务调度算法,实现多个任务"一起执行"(实际上总有些任务不在执行,因为CPU切换任务的速度非常快,看上去在一起执行而已).并发针对的是同一段时间内,有多个任务数在运行,强调同一段时间范围.

并行

并行:指的是任务数≤CPU核数,即任务真的在一起执行.并行针对的同一时刻有多个任务数在运行,强调的是同一时刻.

并发与并行在CPU层面的表现:

?同步和异步

同步:是指线程在访问某一资源时,获得了资源的返回结果之后才会执行其他操作(强调先做某件事,再做某件事).

异步:与同步相对,是指线程在访问某一资源时,无论是否取得返回结果,都进行下一步操作;当有了资源返回结果时,系统自会通知线程.

?threading模块实现多线程.

python的threading模块是对thread模块做了一些包装的,可以更方便我们使用.

创建线程:

????????threading.Thread(target=func)

? ? ? ? *参数target指定线程执行的任务(函数)

注意:在做平台开发的时候,对象若不会再调用,可用"del"方法手动回收,节省内存空间.

追查threading.Thread()源代码,发现,我们穿进去的target参数,最终被赋值为self._target,并且在用完了后,调用了python内置方法del,回收了无用的self._target,回收了内存空间.?

threading模块的Thread类提供一下方法:

run( )? ? ? ? ????????用以表示线程活动的方法

start( )? ? ? ????????启动线程活动

join([time])? ? ? ? 设置主线程会等待time秒后再往下执行,time默认为子线程结束,多个子线程之间设置的值会叠加.

isAlive( )? ? ? ? ? ?返回线程是活动线程

getName( )? ? ? ?返回线程名

setName( )? ? ? ?设置线程名

threading.currentThread(): 返回当前执行的线程.

threading.enumerate(): 返回正在运行的所有线程(list)

threading.activeCount(): 返回正在运行的线程数量

单线程执行func1和func2:

? ? ? ? 总计用时11秒多.

?多线程执行func1和func2:

? ? ? ? 总计用时:6秒多

? ? ? ? 此处必须要join()方法让主线程等待所有子线程都运行结束,否则主线程运行结束了,子线程还在

????????运行.

?线程安全---多线程共享全局变量:

多线程之间修改全局变量

? ? ? ? 线程之间是共用同一内存的,那么线程可以共享全局变量

? ? ? ? 如:2个线程A,B同时对全局变量count递增,A在修改变量count时,刚获取到资源count,还没来得及修改count的值,CPU就被B线程剥夺,此时B读到的count值是A修改之前的值,假如B将count值从100增加到1000,此时CPU再次被A拿到,此时A继续执行之前未修改的count任务,获取到的count值仍是100,假如A将count值从A线程中的100增加到500,B又拿到CPU调度几乎,此时B读到的count数又变成了500,而非之前修改后的1000,此类问题即为多线程情况下的线程安全问题.

? ? ? ? 如何解决此类问题?控制线程,避免同时获取数据.

? ? ? ? ? ? ? ? 同步&互斥锁.

? ? ? ? 同步:同步就是协同步调,按照预定的先后顺序进行运行."同"字从字面上容易理解为一起动作,其实不是,"同"字应指协同/协助/互相配合,如进程,线程同步,可理解为进程或线程A和B一块配合,A执行到一定程度时要依靠B的某个结果,于是停下来,示意B运行;B执行,再将结果给A,A再继续执行.

? ? ? ? 互斥锁:线程同步能够保证多个线程安全访问竞争资源,最简单的同步机制是引入互斥锁.

? ? ? ? ? ? ? 互斥锁为资源引入的一个状态:锁定/非锁定.

? ? ? ? ? ? ? 某个线程要更改共享数据时,先将其锁定,此时自愿的状态为"锁定",其他线程不能更

??????????????改直到该线程释放资源,将资源的状态改为"非锁定",其他线程才能再次锁定该资源.

? ? ? ? ? ? ? ?互斥锁保证了每次只有一个线程进行写入操作,从而保证了多线程情况下数据的正确性.

threading模块中定义了Lock类,可以方便地处理锁定:

? ? ? ? #创建锁:

mutex=threading.Lock()

? ? ? ? #锁定:上锁原则---->哪里需要锁,锁就上哪里

mutex.acquire()

? ? ? ? #释放:

mutex.release()

注意:如果这个锁之前是没有上锁的,那么acquire不会堵塞.

线程安全问题示例:

?解决方案示例:加锁

GIL全局解释器锁:

? ? ? ? IO密集型:涉及到网络收发,磁盘IO的任务都是IO密集型任务,这类任务的特点是CPU消耗少,任务的大部分时间都在等IO操作完成(IO速度远小于CPU和内存的速度)。

? ? ? ? CPU密集型:即计算密集型,任务的特点是要进行大量的计算,消耗CPU资源,比如计算数据,对视频进行高清解码等,全靠CPU的运算能力。

? ? ? ? GIL锁:即全局解释器锁,每个线程在执行前都要先获得GIL锁才能执行,保证了同一时刻只有1个线程可以执行代码,只能在1个CPU中执行,也就造成无法使用多核CPU的硬件优势;GIL锁锁Cpython解释器造成的,也只存在于cpython类型的解释器中,q其他类型的解释器如Jpython解释器无GIL锁的问题,所以 GIL锁跟python语言本身无任何关系。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-01-28 11:45:25  更:2022-01-28 11:47:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:20:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码