前言

channels 是一种类型安全的消息队列,充当两个 goroutine 之间的管道,将通过它同步的进行任意资源的交换。chan 控制 goroutines 交互的能力从而创建了 Go 同步机制。当创建的 chan 没有容量时,称为无缓冲通道。反过来,使用容量创建的 chan 称为缓冲通道。 要了解通过 chan 交互的 goroutine 的同步行为是什么,我们需要知道通道的类型和状态。根据我们使用的是无缓冲通道还是缓冲通道,场景会有所不同,所以让我们单独讨论每个场景。


使用技巧

Channel读写特性(15字口诀)

首先,我们先复习一下Channel都有哪些特性?

  • 给一个 nil channel 发送数据,造成永远阻塞

  • 从一个 nil channel 接收数据,造成永远阻塞

  • 给一个已经关闭的 channel 发送数据,引起 panic

  • 从一个已经关闭的 channel 接收数据,如果缓冲区中为空,则返回一个零值

  • 无缓冲的channel是同步的,而有缓冲的channel是非同步的

以上5个特性是死东西,也可以通过口诀来记忆:“空读写阻塞,写关闭异常,读关闭空零”。

channel 的使用

Unbuffered Channels --无缓冲的通道

无缓冲 chan 没有容量,因此进行任何交换前需要两个 goroutine 同时准备好。当 goroutine 试图将一个资源发送到一个无缓冲的通道并且没有goroutine 等待接收该资源时,该通道将锁住发送 goroutine 并使其等待。当 goroutine 尝试从无缓冲通道接收,并且没有 goroutine 等待发送资源时,该通道将锁住接收 goroutine 并使其等待。

 同步是发送和接收之间的交互所固有的。没有另一个就不可能发生。非缓冲信道的本质是保证同步 

例子

	ch := make(chan int)var wg  sync.WaitGroupwg.Add(2)go func() {defer wg.Done()ch <- 1}()go func() {defer wg.Done()id := <-chfmt.Println(id)}()wg.Wait()

g2 必须等待g1 向chen 发送的数据 两者处于同步

一个 goroutine 在发送消息 foo 之后被阻塞,因为还没有接收者准备好。规范中对这种行为进行了很好的解释:

https://golang.org/ref/spec#Channel_types

If the capacity is zero or absent, the channel is unbuffered and communication succeeds only when both a sender and receiver are ready.

如果容量为零或不存在,则信道不缓冲,通信只有在发送方和接收方都准备好时才能成功。

https://golang.org/doc/effective_go.html#channels

If the channel is unbuffered, the sender blocks until the receiver has received the value

如果信道未缓冲,则发送方将阻塞,直到接收方接收到该值为止

Receive 先于 Send 发生。

好处: 100% 保证能收到。

代价: 延迟时间未知。

Buffered Channels

缓冲通道具有容量,因此可以表现得有点不同。当 goroutine 尝试将资源发送到缓冲通道并且该通道已满时,该通道将锁定 goroutine 并使其等待,直到缓冲区变为可用。如果通道中有空间,发送就可以立即进行,通道就可以继续前进。当 goroutine 尝试从缓冲通道接收,缓冲通道为空时,该通道将锁定 goroutine 并使其等待,直到资源被发送

ch := make(chan int,2)
var wg  sync.WaitGroupwg.Add(2)
go func() {defer wg.Done()ch <- 1ch <- 2
}()
go func() {defer wg.Done()id := <-ch  id1 := <-chfmt.Println(id,id1)
}()wg.Wait()

由于缓冲区大小不足而造成的延迟

不是缓存区越大越好 ,看下面的例子

//放弃
func main()  {const cap = 5ch := make(chan int,cap)go func() {for p := range ch{fmt.Println("接受到:",p)}}()const work = 20for i := 0; i < work; i++ {select {case ch <- i:fmt.Println("传入--",i)default:fmt.Println("drep")}}}

如果缓存区满了,在次写入的数据就会丢失造成影响

回归正传 看下面的例子那个处理的时间短呢?

 

package benchimport ("sync""sync/atomic""testing"
)func BenchmarkWithNoBuffer(b *testing.B) {benchmarkWithBuffer(b, 0)
}func BenchmarkWithBufferSizeOf1(b *testing.B) {benchmarkWithBuffer(b, 1)
}func BenchmarkWithBufferSizeEqualsToNumberOfWorker(b *testing.B) {benchmarkWithBuffer(b, 5)
}func BenchmarkWithBufferSizeExceedsNumberOfWorker(b *testing.B) {benchmarkWithBuffer(b, 25)
}func benchmarkWithBuffer(b *testing.B, size int) {for i := 0; i < b.N; i++ {c := make(chan uint32, size)var wg sync.WaitGroupwg.Add(1)go func() {defer wg.Done()for i := uint32(0); i < 1000; i++ {c <- i%2}close(c)}()var total uint32for w := 0; w < 5; w++ {wg.Add(1)go func() {defer wg.Done()for {v, ok := <-cif !ok {break}atomic.AddUint32(&total, v)}}()}wg.Wait()}
}

goos: windows
goarch: amd64
pkg: 03-go-concurrency/sync_test/07
BenchmarkWithNoBuffer
BenchmarkWithNoBuffer-6                                     4297            3527
02 ns/op
BenchmarkWithBufferSizeOf1
BenchmarkWithBufferSizeOf1-6                                4297            2780
72 ns/op
BenchmarkWithBufferSizeEqualsToNumberOfWorker
BenchmarkWithBufferSizeEqualsToNumberOfWorker-6             6015            2104
72 ns/op
BenchmarkWithBufferSizeExceedsNumberOfWorker
BenchmarkWithBufferSizeExceedsNumberOfWorker-6              8594            1412
05 ns/op
PASS

一个适当大小的缓冲区确实可以使您的应用程序更快!让我们分析基准测试的跟踪,以确定延迟的位置。

Send 先于 Receive 发生。

好处: 延迟更小。

代价: 不保证数据到达,越大的 buffer,越小的保障到达。buffer = 1 时,给你延迟一个消息的保障。

三 例子

Timing out

timeout := make(chan bool, 1)
ch := make(chan int, 1)
go func() {time.Sleep(1 * time.Second)timeout <- true
}()
select {
case <-ch:// a read from ch has occurred
case <-timeout:// the read from ch has timed out
}

一个很好的例子就是超时。虽然 Go 的通道不直接支持它们,但是它们很容易实现。说我们想从通道接收 ch,但是最多要等一秒钟才能到值。我们将首先创建一个信令通道,并启动一个在通过该通道发送信号之前处于睡眠状态的通道

然后,我们可以使用 select 语句从 ch 或者 timeout 接收。如果一秒钟后没有任何内容到达 ch,则选择超时案例,并放弃从 ch 读取的尝试。

超时通道用1值的空间缓冲,允许超时通道发送到通道,然后退出。Goroutine 不知道(或关心)是否接收到值。这意味着,如果 ch 接收发生在超时之前,goroutine 不会永远留在这里。超时通道最终将由垃圾回收器释放。

woker 打工人模式

import ("errors""fmt""runtime""sync""sync/atomic"
)//接口
type PoolWorker interface {DoWork(WorkRoutine int)
}//poolWork被传递到要执行的工作的队列中。
type Poolwork struct {work          PoolWorker //需要执行的任务resultChannel chan error //任务返回信息
}var ErrCapacity =  errors.New("Thread Pool At Capacity")type WorkPool struct {shutdownQueueChannel chan string     // 关闭队列的通道shutdownWorkChannel  chan struct{}   // 关闭工作的通道shutdownWaitGroup    sync.WaitGroup  //用于关闭现有的workqueueChannel         chan Poolwork   // 用于同步对队列的访问的通道。workChannel          chan PoolWorker //用于工作的通道queuedWorkNum        int32           // 排队的工作数activeRoutinesNum    int32           //活动的work 数量queueCapacityNum     int32           // 队列中可存储的最大项目数。
}func New(WorkRoutinesNum int,queueCapacityNum int32)  *WorkPool {workPool := WorkPool{shutdownQueueChannel: make(chan string),shutdownWorkChannel: make(chan struct{}),queueChannel: make(chan Poolwork),workChannel: make(chan PoolWorker),queuedWorkNum: 0,activeRoutinesNum: 0,queueCapacityNum: queueCapacityNum,}//开启 groupworkPool.shutdownWaitGroup.Add(WorkRoutinesNum)//启动workfor i := 0; i < WorkRoutinesNum; i++ {go workPool.workRoutine(i)}//启动queuego workPool.queueRoutine()return &workPool}//停止
func (this *WorkPool) Shutdown() (err error) {//捕获错误defer func() {if r := recover(); r != nil {buf := make([]byte, 10000)runtime.Stack(buf, false)fmt.Println(string(buf))err = fmt.Errorf("%v", r)}}()fmt.Println("Shutdown : Queue Routine")//通知 接受任务的协程停止this.shutdownQueueChannel <- "down"//接受  接受任务的协程返回后<-this.shutdownQueueChannel//关闭shutdownQueueChannelclose(this.shutdownQueueChannel)//接受任务close(this.queueChannel)//关闭工作 Routineclose(this.shutdownWorkChannel)//等待工作协程减少this.shutdownWaitGroup.Wait()//关闭工作chenclose(this.workChannel)return  err
}//work
func (this *WorkPool) workRoutine(workRoutineId int)  {for  {select {case <-this.shutdownWorkChannel:  //接受关闭fmt.Println("workRoutine : ",workRoutineId,"正在结束")this.shutdownWaitGroup.Done() //减少协程returncase item := <- this.workChannel: //接受任务this.doWork(item,workRoutineId) break}}}//执行任务
func (this *WorkPool) doWork(work PoolWorker,workRoutineId int)  {defer fmt.Println("执行完成")defer atomic.AddInt32(&this.activeRoutinesNum,-1)  //工作协程 减少atomic.AddInt32(&this.activeRoutinesNum,1)   //工作协程 增加atomic.AddInt32(&this.queuedWorkNum,-1)      //等待任务减少work.DoWork(workRoutineId)
}//添加任务
func (this *WorkPool) PostWork (goRoutine string,worker PoolWorker) (err error) {defer fmt.Println("goRoutine err: ",err)poolwork := Poolwork{work: worker,resultChannel: make(chan error)}this.queueChannel <- poolwork //将任务添加到 任务chenerr = <- poolwork.resultChannel  //同步等待错误close(poolwork.resultChannel)  //关闭结果 chenreturn err //返回错误
}func (this *WorkPool) queueRoutine()  {for  {select {case <-this.shutdownQueueChannel:  //接受任务chen 终止信号fmt.Println("终止接受任务")    this.shutdownQueueChannel <- "down"  //回复收到终止信号returncase queueItem := <- this.queueChannel:   //同步接受任务//是否已达到处理任务   队列中可存储的最大项目数。if atomic.AddInt32(&this.queuedWorkNum,0) == this.queueCapacityNum{queueItem.resultChannel <- ErrCapacitybreak}atomic.AddInt32(&this.queuedWorkNum,1) //增加存储的最大项目数this.workChannel <- queueItem.work  //向工作chen 投递queueItem.resultChannel <- nil  // 返回nilbreak}}}

下面是调用的逻辑 注意 工作协程 请不要开启太多

type MyTask struct {Name stringOrderId intWP *workpool.WorkPool
}func (mt *MyTask) DoWork(workRoutine int) {fmt.Println(mt.Name)fmt.Printf("*******> WR: %d QW : %d AR: %d\n",workRoutine,1,2)fmt.Println(mt.OrderId)time.Sleep(100 * time.Millisecond)
}func main()  {runtime.GOMAXPROCS(runtime .NumCPU())workPool := workpool.New(runtime.NumCPU() * 3, 100)task := MyTask{Name: "A" + strconv.Itoa(1),OrderId : 1,WP: workPool,}err := workPool.PostWork("main",&task)workPool.Shutdown()fmt.Println(err)
}

总结

在使用通道(或并发)时,要了解和理解围绕保证、通道状态和发送的信令属性很重要。它们将帮助指导您实现您正在编写的并发程序和算法所需的最佳行为。他们将帮助您找到错误并嗅出潜在的错误代码。

stages close their outbound channels when all the send operations are done.

当所有的发送操作完成后,stages 关闭它们的出站通道。

stages keep receiving values from inbound channels until those channels are closed or the senders are unblocked.

阶段保持接收来自入站通道的值,直到这些通道关闭或发件人解除阻塞。

Pipelines unblock senders either by ensuring there’s enough buffer for all the values that are sent or by explicitly signalling senders when the receiver may abandon the channel.

通过确保有足够的缓冲区容纳所有发送的值,或者在接收方可能放弃信道时显式发送方信号,管道可以解除对发送方的阻塞

  • 使用通道来编排和协调 goroutine。
    • 关注通道属性而不是数据共享。
    • 有数据或无数据的信令。
    • 质疑它们用于同步访问共享状态的用途。
      • 在某些情况下,渠道可以更简单,但最初是疑问。
  • 无缓冲通道:
    • 接收发生在发送之前。
    • 优点:100% 保证信号已被接收。
    • 成本:接收信号时的未知延迟。
  • 缓冲通道:
    • 发送发生在接收之前。
    • 好处:减少信号之间的阻塞延迟。
    • 成本:无法保证何时收到信号。
      • 缓冲区越大,保证越少。
      • 缓冲区为 1 可以为您提供一次延迟发送保证。

设计理念

  • 如果通道上的任何给定 Send 可以导致发送 goroutine 阻塞:
    • 不允许使用大于 1 的缓冲通道。
      • 大于 1 的缓冲区必须有原因/度量。
    • 必须知道发送 goroutine 阻塞时会发生什么。
  • 如果通道上的任何给定 Send 不会导致发送 goroutine 阻塞:
    • 您有每次发送的确切缓冲区数。
      • 扇出模式
    • 您测量了最大容量的缓冲区。
      • 掉落图案
  • 缓冲区少即是多。
    • 在考虑缓冲区时不要考虑性能。
    • 缓冲区可以帮助减少信号之间的阻塞延迟。
      • 将阻塞延迟降低到零并不一定意味着更好的吞吐量。
      • 如果一个缓冲区为您提供足够好的吞吐量,请保留它。
      • 问题缓冲区大于 1 并测量大小。
      • 找到可能提供足够好的吞吐量的最小缓冲区。

文献

https://medium.com/a-journey-with-go/go-buffered-and-unbuffered-channels-29a107c00268

https://www.ardanlabs.com/blog/2014/02/the-nature-of-channels-in-go.htm

https://www.ardanlabs.com/blog/2013/10/my-channel-select-bug.html

https://blog.golang.org/concurrency-timeouts

https://blog.golang.org/pipelines

https://talks.golang.org/2013/advconc.slide#1

https://github.com/go-kratos/kratos/tree/master/pkg/sync

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

相关文章

  1. 一分钟解决IDEA下载插件超时问题的解决

    第一步&#xff1a;查询国内插件的节点IP地址 访问以下地址&#xff1a; http://tool.chinaz.com/speedtest/plugins.jetbrains.com 第二步&#xff1a;选择运营商 直接全选然后点击查看分析 第三步&#xff1a;选择解析时间最快的那个 复制ip地址 第四步&#xff1a;修改host文…...

    2024/4/28 18:34:40
  2. 详细解析高速电路设计中耦合电容的重要性

    详细解析高速电路设计中耦合电容的重要性...

    2024/4/28 0:41:44
  3. Java - 线程创建与常用方法

    方式一&#xff1a;继承Thread 重写run()方法 public class HelloWorld extends Thread{public static void main(String[] args){HelloWorld hwnew HelloWorld();//开启线程hw.start();}// 重写run方法Overridepublic void run() {while (true) {System.out.println("线…...

    2024/4/28 18:34:52
  4. Arthas—Java诊断工具使用

    Arthas 是Alibaba开源的Java诊断工具 当你遇到以下类似问题而束手无策时&#xff0c;Arthas可以帮助你解决&#xff1a; 这个类从哪个 jar 包加载的&#xff1f;为什么会报各种类相关的 Exception&#xff1f;我改的代码为什么没有执行到&#xff1f;难道是我没 commit&#x…...

    2024/4/28 12:46:16
  5. 13、IntelliJ idea常用快捷键

    1 执行(run) altr 2 提示补全 (Class Name Completion) alt/ 3 单行注释 ctrl / 4 多行注释 ctrl shift / 5 向下复制一行 (Duplicate Lines) ctrlaltdown 6 删除一行或选中行 (delete line) ctrld 7 向下移动行(move statement down) altdown 8 向上移动行(move statement …...

    2024/4/28 14:27:26
  6. Q2-合并两个有序数组LeetCode88

    88. 合并两个有序数组 难度简单1167 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中&#xff0c;使合并后的数组同样按 非递减顺序 排列。 注意&a…...

    2024/4/29 0:32:27
  7. 银行卡只显示前后四为,中间用*星号代替

    <el-table-column label"银行账号" align"center" prop"cardNumber" ><template slot-scope"{row}"><span>{{ row.cardNumber ? row.cardNumber.replace(/^(\d{4})\d(\d{4})$/,"$1****$2") :""…...

    2024/4/27 23:13:30
  8. 如何搭建第一个SpringBoot项目?

    1&#xff0c;在IDEA中构建SpringBoot工程&#xff1a; 2&#xff0c;打开项目&#xff0c;下载好依赖后&#xff0c;可看到SpringBoot工程&#xff1a; 3,访问地址即可&#xff1a;...

    2024/4/28 18:19:55
  9. nuxt 引入vue-baidu-map/vue-amap 地图底图空白,看不到线路

    前提&#xff1a;百度和高德地图都试过了&#xff0c;都是一片空白&#xff0c;但是点击元素可以显示地点详细信息样式。唯独底图瓦片不显示。 如果只是为了做展示用&#xff0c;不使用其他功能&#xff0c;可以直接引入原生百度地图 <template><div id"map&qu…...

    2024/4/15 0:34:29
  10. OpenGL纹理贴图

    1、用到Opencv将png图片读取到内存&#xff0c;然后转换为GLubyte–unsigned char数据 2、将影像贴图到OpenGL纹理上 #include <stdlib.h> #include "GL/glut.h" #include <opencv.hpp> using namespace cv; //OpenCV读取图像 Mat I imread("C://…...

    2024/4/28 3:45:40
  11. vue语法和各个函数的作用

    export default{data(){ // 定义数据return{obj:{}}},created(e){ // 页面数据渲染完成调用},props:{ // 组件传值&#xff0c;传过来的数据先在这里定义data:{type:String, //类型required: true, // 是否必填default:0 // 默认值}}components:{ // 定义组件component: compon…...

    2024/4/28 13:37:38
  12. 嵌入式开发---知识点总结

    数据在存储器中的存放格式 数据在单片机中的存储格式分为大端存储和小端存储。单片机常用小端格式存储。 小端存储 &#xff1a;是指数据的低位保存在内存的低地址中&#xff0c;而数据的高位保存在内存的高地址中。 大端存储&#xff1a;是指数据的低位保存在内存的高地址中…...

    2024/4/28 17:43:56
  13. 使用tesseral遇到的问题以及解决方案

    使用7.0.6版本遇到的问题 解决方案&#xff0c;https://jingyan.baidu.com/article/d5a880ebd9ec2313f047cc4f.html 登录该网页按照步骤操作即可...

    2024/4/28 5:26:21
  14. 多种形式ICP问题的ceres实例应用

    多种形式ICP问题的ceres实例应用 ICP方法主要解决空间点云3D-3D的运动估计问题&#xff0c; 已知&#xff1a;t1t_1t1​和t2t_2t2​时刻感知到的两个点云信息&#xff08;基于传感器坐标系&#xff09;&#xff0c;和t1t_1t1​时刻的传感器位于全局坐标系下的坐标p1p_1p1​。 …...

    2024/4/28 21:27:50
  15. LINUX有两个模板目录

    模板目录名模板目录名不同系统有所不同&#xff0c;比如&#xff1a;模板、.Templates 系统模板目录 /etc/skel/模板 /etc/skel/.Templates 不同系统也会有所不同。 用户模板目录 ${HOME}/模板 ${HOME}/.Templates...

    2024/4/28 14:58:26
  16. 域名转让流程

    域名转让流程需要几天&#xff1f;如何操作域名转让流程&#xff1f;在解释域名转移过程之前&#xff0c;让我们先看看转移规则。作为域名申请人&#xff0c;您有特定的权利&#xff0c;包括将您的域名转让给其他注册人或注册人的权利。如果你想转移域名&#xff0c;你需要知道…...

    2024/4/27 21:27:04
  17. 如何避免样式全局污染

    代码&#xff1a; index.js <TableclassName {styles.benchtable}</Table> index.less .benchtable{:global(.ant-table-thead> tr >th){color:royalblue;text-align:center} }...

    2024/4/27 23:30:28
  18. java基础查漏

    1、为什么重写equals()方法&#xff0c;一定要重写hashCode()方法&#xff1f; 因为很多比较器会先比较hashCode是否相同&#xff0c;以此提高查找效率&#xff0c;如果不重写&#xff0c;hashCode大概率不同&#xff0c;就不会再通过equals方法比较了。...

    2024/4/28 10:36:20
  19. VB编程之路-如何让界面美化

    VB编程之路-如何让界面美化 作者:漏洞多多  来源于:中国VB网  发布时间:2005-5-20如果大家用过《Windows优化大师》,肯定会被它的界面所倾倒,其实利用ActiveSkin 就可以办到,甚至更爽,但是如果要做的共享软件只是一个文件,在加上几个OCX累赘,似乎很是不爽,看看VB是怎么…...

    2024/4/15 0:34:50
  20. Jmeter基础使用

    1、打开apache-jmeter-5.4.1\bin目录下的Jmeter.bat批处理文件 2、在TestPlan处点击鼠标右键&#xff0c;选择添加>线程>线程组&#xff0c;线程就是代表一个用户 线程数&#xff1a;模拟的用户数量 Ramp—Up时间&#xff1a;指定线程完成的时间 循环次数&#xff1a;线…...

    2024/4/15 0:35:15

最新文章

  1. Python快速入门1数据类型(需要具有编程基础)

    数据类型&#xff1a; Python 3.0版本中常见的数据类型有六种&#xff1a; 不可变数据类型可变数据类型Number&#xff08;数字&#xff09;List&#xff08;列表&#xff09;String&#xff08;字符串&#xff09;Dictionary&#xff08;字典&#xff09;Tuple&#xff08;元…...

    2024/4/29 2:26:05
  2. 梯度消失和梯度爆炸的一些处理方法

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

    2024/3/20 10:50:27
  3. [C++/Linux] UDP编程

    一. UDP函数 UDP&#xff08;用户数据报协议&#xff0c;User Datagram Protocol&#xff09;是一种无连接的网络协议&#xff0c;用于在互联网上交换数据。它允许应用程序发送数据报给另一端的应用程序&#xff0c;但不保证数据报能成功到达&#xff0c;也就是说&#xff0c;它…...

    2024/4/29 0:09:40
  4. 【VTKExamples::Meshes】第七期 TableBasedClipDataSetWithPolyData

    很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享VTK样例TableBasedClipDataSetWithPolyData,并解析接口vtkTableBasedClipDataSet,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你…...

    2024/4/26 6:46:58
  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