本来是准备阅读 j.u.c 包下 ConcurrentHashMap 的底层源码,理解 ConcurrentHashMap 的实现原理的,看了一点点发现里面用到了很多 CAS。并且 atomiclocks 这两个包中也大量使用了 CAS,所以就先把 CAS 的原理搞清楚了之后再继续后面的内容。

看了一大堆文章,也是把它弄懂了。令我没想到的是,自己竟然从 Java 源码看到 openjdk 源码及汇编码,最后还看了一些 intel 手册的内容,最终不仅学会了 CAS,还学到了许多其他的知识。

慢慢发现,其实深入研究某一个知识点的实现,还是蛮有意思的,只是过程可能有点艰辛。


一、CAS 介绍

CAS 是乐观锁的一种实现方式,是一种轻量级锁,j.u.c 中很多工具类的实现就是基于 CAS 的。

1、什么是 CAS?

CAS (Compare And Swap)比较并交换操作。

CAS 有 3 个操作数,分别是内存位置 V、旧的预期值 A 和拟修改的新值 B。当且仅当 V 符合预期值 A 时,用新值 B 更新 V 的值,否则什么都不做。

用一段伪代码来帮助理解 CAS:

Object  A = getValueFromV();// 先读取内存位置 V 处的值 A
Object B = A + balaba;// 对 Value 做一定处理,得到新值 B// 下面这部分就是 CAS,通过硬件指令实现
if( A == actualValueAtV ) {// actualValueAtV 为执行当前原子操作时内存位置 V 处的值setNewValueToV(B);// 将新值 B 更新到内存位置 V 处
} else {doNothing();// 说明有其他线程改过内存位置 V 处的值了,A 已经不是最新值了,所以基于 A 处理得到的新值 B 是不对的
}

2、CAS 的优点

不加锁,在并发冲突程度不高的情况下,效率极高。(可以参考乐观锁的优点)

3、CAS 存在哪些缺陷?

(1)CAS + 自旋 ==> 可能导致:循环时间长,CPU 开销大

大多数情况下,CAS 是配合自旋来实现对单个共享变量的更新的。

如果自旋 CAS 长时间不成功(说明并发冲突大),会给 CPU 带来非常大的执行开销。

(2)ABA 问题

首先明白一点:CAS 本身是一个原子操作,不存在 ABA 问题。

不过使用 CAS 更新数据一般需要三个步骤:

  • 取数
  • 处理数据
  • CAS 更新数据

在这个过程中可能出现 ABA 问题。上面三个步骤不是一个原子操作,所以可能出现下面这种情况:

  • 线程 thread1 查询 A 的值为 a,开始处理数据
  • 线程 thread2 执行完三个步骤将 A 的值更新为 b
  • 线程 thread3 执行完三个步骤将 A 的值从 b 又更新回 a
  • 线程 thread1 处理完数据,得到 c ,这时它对比内存中的值 a,将 A 的值更新为 c

线程 thread1 在处理数据的过程中,实际上 A 的值已经经历了 a -> b -> a 的过程,但是对于线程 thread1 来说判断不出来,所以线程 thread1 还是可以将 A 的值更新为 c。这就是我们说的 ABA 问题。

用 Java 代码模拟了一下 ABA 问题:

/*** @author HappyFeet* @since Jan 02, 2020*/public class CasABAProblem {private static final Unsafe unsafe = UnsafeUtils.getUnsafe();private static final long valueOffset;static {try {valueOffset = unsafe.objectFieldOffset(CasABAProblem.class.getDeclaredField("value"));} catch (Exception ex) {throw new Error(ex);}}private volatile int value = 0;public static void main(String[] args) throws InterruptedException {CasABAProblem abaProblem = new CasABAProblem();Thread thread1 = new Thread(() -> {int millis = 1000;int value = abaProblem.getValue();println("value is {}, and sleep {} millis.", value, millis);try {Thread.sleep(millis);} catch (InterruptedException e) {// do nothing}boolean cas = unsafe.compareAndSwapInt(abaProblem, valueOffset, value, value + 50);println("cas is {}, value from {} to {} after CAS.", cas, value, abaProblem.getValue());}, "thread1");Thread thread2 = new Thread(() -> {int millis = 200;println("sleep {} millis", millis);try {Thread.sleep(millis);} catch (InterruptedException e) {// do nothing}int value = abaProblem.getValue();boolean cas = unsafe.compareAndSwapInt(abaProblem, valueOffset, value, value - 100);println("cas is {}, value from {} to {} after CAS.", cas, value, abaProblem.getValue());}, "thread2");Thread thread3 = new Thread(() -> {int value = abaProblem.getValue();boolean cas = unsafe.compareAndSwapInt(abaProblem, valueOffset, value, value + 100);println("cas is {}, value from {} to {} after CAS.", cas, value, abaProblem.getValue());}, "thread3");thread1.start();thread2.start();thread3.start();thread1.join();}public int getValue() {return value;}
}

执行程序,结果如下:

2020-01-02T22:57:48.565 thread thread2 : sleep 200 millis
2020-01-02T22:57:48.565 thread thread1 : value is 0, and sleep 1000 millis.
2020-01-02T22:57:48.566 thread thread3 : cas is true, value from 0 to 100 after CAS.
2020-01-02T22:57:48.783 thread thread2 : cas is true, value from 100 to 0 after CAS.
2020-01-02T22:57:49.585 thread thread1 : cas is true, value from 0 to 50 after CAS.

ABA 问题可能带来的问题是什么呢?换句话说,a -> b -> a 这个过程可能会有哪些副作用?

思考了很久,没想到什么好的例子。。。等想到了之后再来更新。。。下面我们来看如何避免 ABA 问题。

其实避免 ABA 问题其实很简单,只需要给数据添加一个版本号。上面例子中的 a -> b -> a 的过程就会变成 1a -> 2b -> 3a,当线程 thread1 处理完数据,发现 1a != 3a,所以也就不会更新 A 的值了。

我还试了一下 compareAndSwapObject 方法,发现这个方法比较的是对象的引用,因为不管我怎么修改对象中的属性,compareAndSwapObject 都能执行成功。。。所以 Unsafe 中 compareAndSwapcompare 是否就可以用 == 来等价呢?看了一下,AtomicReferencecompareAndSet(V expect, V update) 上的文档好像也确实是这么写的:

* Atomically sets the value to the given updated value
* if the current value {@code ==} the expected value.

我看到很多人的博客上面写了 ABA 问题,举了链表或栈的出栈入栈相关的例子。参考 wikipedia 上面的例子:比较并交换

里面是用 C 操作的堆,对堆进行了一系列的 pop 和 push 操作。并解释说:由于内存管理机制中广泛使用的内存重用机制,导致 NodeC 的地址与之前的 NodeA 一致。

这种情况在 Java 中会出现吗?我觉得还是可以思考思考的。

(3)不支持多个共享变量的原子操作

从上面的介绍来看,CAS 本身就是针对单个共享变量的,对于多个共享变量,当然是不支持的。

当然,如果把多个共享变量合并成一个共享变量(放在一个对象里面),也是可以进行 CAS 操作。

这就看怎么理解多个共享变量了,如果说一个共享变量的多个属性可以被称之为多个共享变量,那么 CAS 也是可以支持的。

二、CAS 的底层实现原理

CAS 的核心是 Unsafe 类。而当你去看 Unsafe 的源码的时候,发现里面调用的是 native 方法。而要看 native 方法的实现,确实需要花很大一番功夫,并且基本上都是 C++ 代码。

在经过一番折腾后,至少我大致知道了 Unsafe 类中的 native 方法的调用链及关键的 C++ 源码。

compareAndSwapInt 为例,这个本地方法在 openjdk 中依次调用的 C++ 代码为:

(1)unsafe.cppopenjdk/hotspot/src/share/vm/prims/unsafe.cpp

UNSAFE_ENTRY(jboolean, Unsafe_CompareAndSwapInt(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jint e, jint x))UnsafeWrapper("Unsafe_CompareAndSwapInt");oop p = JNIHandles::resolve(obj);jint* addr = (jint *) index_oop_from_field_offset_long(p, offset);return (jint)(Atomic::cmpxchg(x, addr, e)) == e;
UNSAFE_END

点击查看源码

(2)atomic_****_****.inline.hpp

  • 如果是运行在 windows_x86(windows 系统,x86 处理器)下

atomic_windows_x86.inline.hppopenjdk/hotspot/src/os_cpu/windows_x86/vm/atomic_windows_x86.inline.hpp

inline jint     Atomic::cmpxchg    (jint     exchange_value, volatile jint*     dest, jint     compare_value) {// alternative for InterlockedCompareExchangeint mp = os::is_MP();__asm {mov edx, destmov ecx, exchange_valuemov eax, compare_valueLOCK_IF_MP(mp)cmpxchg dword ptr [edx], ecx}
}

点击查看源码

  • 如果是运行在 linux_x86 (linux 系统,x86 处理器)下
inline jint     Atomic::cmpxchg    (jint     exchange_value, volatile jint*     dest, jint     compare_value) {int mp = os::is_MP();__asm__ volatile (LOCK_IF_MP(%4) "cmpxchgl %1,(%3)": "=a" (exchange_value): "r" (exchange_value), "a" (compare_value), "r" (dest), "r" (mp): "cc", "memory");return exchange_value;
}

点击查看源码

__asm__ 表示汇编的开始

volatile 表示禁止编译器优化

LOCK_IF_MP 是个内联函数

#define LOCK_IF_MP(mp) "cmp $0, " #mp "; je 1f; lock; 1: "

以上几个参考自占小狼的深入浅出 CAS。

os::is_MP() 这个函数是判断当前系统是否是多核处理器。

所以这个地方应该就是生成汇编码,我就只关注了这一行 LOCK_IF_MP(%4) "cmpxchgl %1,(%3)" ,毕竟后面的也看不懂。。。

这里相当于是如果当前系统是多核处理器则会在添加 lock 指令前缀,否则就不加。

关于 lock 指令前缀说明:

  • 《深入理解 Java 虚拟机》在将 Java 内存模型与线程时有讲到(371 页):“关键在于 lock 前缀,查询 IA32 手册,它的作用是使得本 CPU 的 Cache 写入了内存,该写入动作也会引起别的 CPU 或者别的内核无效化( Invalidate )其 Cache,这种操作相当于对 Cache 中的变量做了一次前面介绍 Java 内存模式中所说的 ’ store 和 write ’ 操作。”
  • intel IA32 手册 中 8.1 LOCKED ATOMIC OPERATIONS 关于 lock 前缀的含义:
    • 保证原子操作
    • 总线锁定,通过使用 LOCK# 信号和 LOCK 指令前缀
    • 高速缓存一致性协议,确保可以对高速缓存的数据结构执行原子操作(缓存锁定)
  • lock 指令前缀可以禁止指令重排序:可以通过阅读 intel IA32 手册中 8.2.2 Memory Ordering in P6 and More Recent Processor Families8.2.3 Examples Illustrating the Memory-Ordering Principles 两节的内容得出。

看到这里,CAS 的底层实现原理也就很显然了,实际上就是:lock cmpxchg

cmpxchg 是硬件级别的原子操作指令,lock 前缀保证这个指令执行结果的内存可见性和禁止指令的重排序。

关于 lock cmpxchg 的一些个人理解:由于 lock 指令前缀会锁定总线(或者是缓存锁定),所以在该 CPU 执行时总线是处于独占状态,该 CPU 通过总线广播一条 read invalidate 信息,通过高速缓存一致性协议(MESI),将其余 CPU 中该数据的 Cache 置为 invalid 状态(如果存在该数据的 Cache ),从而获得了对该数据的独占权,之后再执行 cmpxchg 原子操作指令修改该数据,完成对数据的修改。

三、一些思考和疑问

1. 既然 CAS 具有 volatile 的读和写的内存语义,那为什么还需要把变量声明成 volatile 呢?

前面又说到,如果当前系统是多核处理器则会在添加 lock 指令前缀,否则就不加。而 volatile 是在给变量赋值时会加 lock 指令的。如图:

volatile putfield

所以原因是否如下:

  • 对于不走 CAS,单纯走 set 方法的,volatile 可以保证这些赋值的内存可见性;
  • 对于单核处理器,CAS 是没有加 lock 指令的,这种情况仅靠 cmpxchg 能否保证各个线程的本地缓存失效呢?对 volatile 变量做 CAS 是否可以避免这个问题?

以上仅是我个人的一些理解,不一定正确,欢迎大家来一起讨论。

2. 总线锁定就和多线程中获取锁是一个道理,它的粒度要更小;CPU Cache 也可以类比到线程的本地工作内存。

四、结语

学 CAS ,最后学到的知识有:

  • 能够粗浅阅读一些 openjdk 的 C++ 源码

  • 加深对 volatile 的理解

  • lock 指令的作用

  • 内存屏障

  • 如何反汇编 Java 字节码

  • 以及一些工具的使用

收获颇丰!给自己点个赞!哈哈哈~

参考资料:

(1)深入浅出CAS

(2)JAVA CAS原理深度分析

(3)Why Memory Barriers?中文翻译(上)

(4)intel IA32 手册 8.1、8.2、8.3节

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. git的https拉取和推送

    这里以码云作为远程仓库创建的仓库有公有和私有两种性质公有仓库,所有人都可以访问,所有人都可以拉取项目代码git pull https://gitee.com/share51/git-demo.git但是如果想推送,必须别添加为项目成员私有仓库的拉取和提交,都必须是项目的成员仓库的管理员,因为本身就是创建…...

    2024/4/28 9:19:55
  2. torchtext读取文本数据集

    本文主要介绍如何使用Torchtext读取文本数据集。 Torchtext是非官方的、一种为pytorch提供文本数据处理能力的库, 类似于图像处理库Torchvision。 Install 下载地址:https://github.com/text 安装:pip install text-master.zip 测试安装是否成功: import torchtext How To …...

    2024/3/29 12:03:42
  3. 读取文件时,不跳过空格和换行

    读取文件时,如何读出里面的空格和换行符 加入noskipws算子,这样可以不跳过空格和换行例如char Miweninfile >> noskipws >> Miwen;...

    2024/4/28 15:35:37
  4. vue使用element-ui时报错

    在vue项目中引用element-ui时,按照文档操作,运行时依旧报错,解决办法,在webpack.config.js文件找到如下位置添加配置然后重启服务即可。...

    2024/3/29 12:03:41
  5. 几个常用的方法

    title() 首字母大小写 upper() 全部大写 lower() 全部小写 \t 制表符(空格) \n 换行 rstrip() 去末尾空格 lstrip() 去开头空格 strip() 去开头和结尾空格 ps:注意,\t,\n放在变量前不行,表达不出来...

    2024/4/23 3:59:21
  6. Mysql常用sql

    update 表 set 字段1=replace(字段1, , , ),字段2=replace(字段2,,,) where pernr=00046122;//清除 表 中 字段中的空格 SELECT * from 表 t GROUP BY t.字段1 HAVING count ( t.字段1 ) > 1 查询字段相等的大于1的数据追加字符串update 表 set 字段1= CONCAT(00,字段…...

    2024/3/29 12:03:38
  7. 查看redhat版本

    cat /etc/issue...

    2024/3/29 12:03:37
  8. WPF Core实战提高教程(1.1)-自定义控件NumberBox

    WPF自定义控件开发 - 第一节(NumberBox) WPF由于ControlTemplate、Style、Adorner等神器的存在,自定义控件看起来已经没有了太大意义,我们可以利用现有的机制拼凑出任何功能的可复用的控件,但不可避免的我们经常需要自定义绘制、对现有的控件做功能性扩展。 首先解释下,我…...

    2024/3/29 12:03:37
  9. logstash使用JDBC连接MySQL错误(未解决)

    使用JDBC连接MySQL8.0.11的时候一切正常。 这次我要连接的是古董数据库MySQL5.0.92-log 开始时候使用JDBC8.0.11 [2020-01-03T08:17:00,189][ERROR][logstash.inputs.jdbc ] Unable to connect to database. Tried 1 times {:error_message=>"Java::JavaSql::SQLNo…...

    2024/3/29 12:03:36
  10. 日期操作

    获取上月年份月份 Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.MONTH, -1) int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH) + 1; 获取上月第一天和最后一天 Calendar firstCal = calendar; firstCal.add(Calendar…...

    2024/3/29 12:03:39
  11. Mysql之SQL优化篇

    概述要知道怎么优化首先要知道一条SQL是怎么被执行的首先我们会连接到这个数据库上,这时候接待你的就是连接器。连接器负责跟客户端建立连接、获取权限、维持和管理连接。MySQL拿到一个查询请求后,会先到查询缓存看看,之前是不是执行过这条语句。然后分析器先会做“词法分析…...

    2024/3/29 12:03:33
  12. exchange server 退信(ndr)及解决方案总汇_exchange server

    未送达报告 (NDR) 是向发件人报告邮件传递状态的系统邮件。这种邮件是一种称为“传递状态通知”的常规邮件信息结构的子类。传递状态通知描述三种不同类型的情况: %26#8226; 成功(即 2.X.X 数字代码) %26#8226; 持续性瞬态故障(即 4.X.X 数字代码) %26#8226; 永久性故障(…...

    2024/3/29 12:03:33
  13. Dev ASPxGridView 根据关键列分组合并单元格

    Dev ASPxGridView 根据关键列分组合并单元格 : List lMergeFileds=New List{…};//预定义需要合并的列名集合 string sMergeByKey=“业务编号”;//根据哪列进行单元格合并,在这里定义,比如我根据业务编号分组合并,即相同业务编号内合并protected void ASPxGridView1_Custo…...

    2024/4/14 5:45:47
  14. 解决xftp上传图片损坏显示不了的问题

    问题原因: 出现图片损坏的根本原因是linux和windows的换行符不同的问题,如果选用了 ASCII 的方式传输文件, windows 下的\rn 会自动转换成\r , 当图片中包含rn是就会被转换成n,所以造成了图片的损坏 解决办法: 文件传输方式更换成二进制传输,如果使用二进制串是还是不行的…...

    2024/3/29 12:03:31
  15. 写一个vue项目小小的准备工作。

    vue 项目开发准备工作 1、搭建项目环境 写文档:产品说明、工作日志、接口说明文档、数据库说明文档、项目架构说明文档 1、manage:后台管理系统商品的管理店铺的管理店铺类别管理管理员的管理用户管理。等 2、site:前端渲染。前端站点首页,用户界面。搜索。类别。详情。 3、a…...

    2024/3/29 12:03:29
  16. Spring Cloud Hoxton 版本微服务项目搭建 config 配置中心并且开启安全认证

    Spring Cloud Hoxton 版本微服务项目搭建 config 配置中心前言 在上一篇文章博主已经讲解了项目如何创建,不会的话可以前往学习,传送门:Spring Cloud Hoxton 版本微服务项目搭建eureka注册中心 以及 Spring Cloud Hoxton 版本微服务项目搭建 admin 监控管理中心。 **本篇用…...

    2024/3/29 12:03:28
  17. Spring Cloud Hoxton 版本微服务项目搭建 config 配置中心客户端

    Spring Cloud Hoxton 版本微服务项目搭建 config 配置中心客户端前言 在上一篇文章博主已经讲解了项目如何创建,不会的话可以前往学习,传送门:Spring Cloud Hoxton 版本微服务项目搭建eureka注册中心 以及 Spring Cloud Hoxton 版本微服务项目搭建 admin 监控管理中心 以及…...

    2024/4/11 22:04:30
  18. Token系统安全学习笔记

    ...

    2024/4/22 13:01:57
  19. JDK1.8的新特性

    JDK1.8的新特性 1. 前言 JDK1.8已经发布很久了,在很多企业中都已经在使用。并且Spring5、SpringBoot2.0都推荐使用JDK1.8以上版本。所以我们必须与时俱进,拥抱变化。 Jdk8这个版本包含语言、编译器、库、工具和JVM等方面的十多个新特性。在本文中我们将学习以下方面的新特性:…...

    2024/3/29 8:01:43
  20. 剑指Offer对答如流系列 - 实现Singleton模式

    文章目录面试题2:实现Singleton模式一、懒汉式写法二、饿汉式写法三、枚举 面试题2:实现Singleton模式 题目:设计一个类,我们只能生成该类的一个实例。 由于设计模式在面向对象程序设计中起着举足轻重的作用,在面试过程中很多公司都喜欢问一些与设计模式相关的问题。在常用…...

    2024/4/7 21:56:09

最新文章

  1. js 下载音频的实现方式

    通常下载文件我们会用到 <a> 标签&#xff0c;但是 a 标签在下载音频的时候会跳转到一个新页面进行播放&#xff0c;不会直接下载&#xff0c;这与我们的需求南辕北辙。这里我通过查询资料&#xff0c;找到了两种方式&#xff08;原理想通&#xff0c;也可以理解为一种&a…...

    2024/4/28 16:36:32
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 【嵌入式开发 Linux 常用命令系列 4.3 -- git add 不 add untracked file】

    请阅读【嵌入式开发学习必备专栏 】 文章目录 git add 不add untracked file git add 不add untracked file 如果你想要Git在执行git add .时不添加未跟踪的文件&#xff08;untracked files&#xff09;&#xff0c;你可以使用以下命令&#xff1a; git add -u这个命令只会加…...

    2024/4/25 4:06:17
  4. redis之主从复制、哨兵模式

    一 redis群集有三种模式 主从复制&#xff1a; 主从复制是高可用Redis的基础&#xff0c;哨兵和集群都是在主从复制基础上实现高可用的。 主从复制主要实现了数据的多机备份&#xff0c;以及对于读操作的负载均衡和简单的故障恢复。 缺陷&#xff1a; 故障恢复无法自动化&…...

    2024/4/28 3:24:26
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/28 13:52:11
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/28 3:28:32
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/26 23:05:52
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/28 13:51:37
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/28 15:57:13
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/28 1:22:35
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/25 18:39:14
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/26 23:04:58
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/27 23:24:42
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/26 19:46:12
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/27 11:43:08
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/27 8:32:30
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57