latch

latch free等待问题之Result Cache:RC Latch优化案例

让人想犯罪 __ 提交于 2019-12-05 16:30:19
问题背景: 客户反馈数据库运行缓慢,DB (12c) 问题解决 1> 查看相关时间段的AWR报告 查看DB的整体负载情况看出数据库已经比较繁忙 AWR报告中存在大量异常sql(不属于业务模块) 例如 select chainviewi0_.id as id1_112_, chainviewi0_.actId as actId2_112_, chainviewi0_.activityName as activityName3_112_, chainviewi0_.approved as approved4_112_, chainviewi0_.approvedDate as approvedDate5_112_, chainviewi0_.barcode as barcode6_112_, chainviewi0_.chainSku_id as chainSku_id7_112_, chainviewi0_.channelCrowdCode as channelCrowdCode8_112_, chainviewi0_.conditionType as conditionType9_112_, chainviewi0_.coverBefore as coverBefore10_112_, chainviewi0_.dailyLimit as dailyLimit11_112_,

[转帖]Latch

回眸只為那壹抹淺笑 提交于 2019-12-04 10:17:32
Latch (转) http://blog.csdn.net/tianlesoftware/article/details/5263238 2013-05-24 15:33:09 huashanlunjian 阅读数 13更多 分类专栏: 数据库 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/huashanlunjian/article/details/84435068 一. Latch 说明 1.1 Latch 在之前的一篇文章里的第四部分对Latch 有了说明,参考: 锁 死锁 阻塞 Latch 等待 详解 http://blog.csdn.net/tianlesoftware/archive/2010/08/20/5822674.aspx Latch属于System Lock, 用于保护SGA区中共享数据结构的一种串行化锁定机制。Latch的实现是与操作系统相关的,尤其和一个进程是否需要等待一个latch、需要等待多长时间有关。 Latch是Oracle提供的轻量级锁资源,是一种能够极快地被获取和释放的锁,能快速,短时间的锁定资源,防止多个并发进程同时修改访问某个共享资源,它只工作在SGA中,通常用于保护描述buffer cache中block的数据结构。

并行流适用场景-CPU密集型

匿名 (未验证) 提交于 2019-12-02 23:34:01
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/larva_s/article/details/90403578 文章目录 1. 场景描述 2. 原因猜测 3. 测试 3.1 默认并行流线程数 3.2 提高并行流线程数 3.3 测试结果:6w个任务 4. 总结 4.1 I/O密集型 4.1 CPU密集型 5. 参考资料 1. 场景描述 2. 原因猜测 3. 测试 @Service public class ConsumMsg { @Autowired StreamOpt streamOpt ; /** * 初始化任务队列 * @param count * @return */ public List < Integer > initMsg ( int count ) { List < Integer > list = Lists . newArrayList ( ) ; for ( int i = 0 ; i < count ; i ++ ) { list . add ( i ) ; } return list ; } /** * 并行流处理 * @param count */ public void parallel ( int count ) { List < Integer > list = initMsg ( count )

JavaSE--CountDownLatch &amp; CyclicBarrier

匿名 (未验证) 提交于 2019-12-02 21:53:52
参考: http://www.importnew.com/21889.html CountDownLatch    countDown() 方法执行完只是计数器减一, 并不会阻塞当前运行线程的的后续代码执行. 1 package org.wzh.demo.demo1; 2 3 import java.util.Random; 4 import java.util.concurrent.CountDownLatch; 5 6 public class D4CountDownLatch { 7 8 class Task extends Thread { 9 10 private CountDownLatch latch; 11 12 public Task(CountDownLatch latch) { 13 super (); 14 this .latch = latch; 15 } 16 17 @Override 18 public void run() { 19 // TODO Auto-generated method stub 20 try { 21 int time = ( new Random().nextInt(8000) + 10000) / 1000 ; 22 System.out.println(Thread.currentThread().getName() +

详解Java多线程与高并发(五)__CountDownLatch

匿名 (未验证) 提交于 2019-12-02 21:45:52
门闩 - CountDownLatch 可以和锁混合使用,或替代锁的功能。 理解: 门闩上挂了多把锁,在门闩未完全开放之前(门闩上还有锁)等待。当门闩完全开放后执行。 代码演示如下: public class Test_15 { CountDownLatch latch = new CountDownLatch(5); //初始化一个门闩,挂了5把锁 void m1(){ try { latch.await();// 等待门闩开放。 } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("m1() method"); } void m2(){ for(int i = 0; i < 10; i++){ if(latch.getCount() != 0){ // 门闩上还有锁 System.out.println("latch count : " + latch.getCount()); latch.countDown(); // 减门闩上的锁。 } try { TimeUnit.MILLISECONDS.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("m2

多线程笔记一 --- CountDownLatch

时光毁灭记忆、已成空白 提交于 2019-12-01 20:37:32
一、代码使用样例 通过CountDownLatch实现:"主线程"等待"5个子线程"全部都完成"指定的工作(休眠1000ms)"之后,再继续运行。 import java.util.concurrent.CountDownLatch; public class CountDownLatchTest { private static CountDownLatch latch = new CountDownLatch(5); public static void main(String[] args) { System.out.println("Main Thread start...."); System.out.println(); for (int i = 0; i < 5; i++) { new InnerThread().start(); } try { latch.await(); System.out.println(); System.out.println("Main Thread latch.getCount = " + latch.getCount()); } catch (InterruptedException e) { System.out.println("Exception happened in latch await: " + e); }

CountDownLatch 应用

核能气质少年 提交于 2019-11-30 10:58:26
package com.hiberate.huijpa; import java.io.*; import java.util.ArrayList; import java.util.List; import java.util.concurrent.CountDownLatch; public class Client { private int[] nums; public Client(int nums) { this.nums = new int[nums]; } public int calc(String line, int index, CountDownLatch latch){ String[] nus = line.split(","); int total=0; for (String num : nus) { total += Integer.parseInt(num); } System.out.println(Thread.currentThread()+" 结果:"+total); nums[index] = total; latch.countDown(); return total; } public int sum(){ int total=0; for (int num : nums) { total += num; } return

latch free 等待事件说明

非 Y 不嫁゛ 提交于 2019-11-28 08:06:57
当进程想要获取锁存器而此时该锁存器正被其他进程持有时产生Latch Free(锁存器空闲)等 待事件,类似于排队,Oracle使用锁存器来保护数据结构。一次只能在一个进程在获得锁存器后 修改或检查数据结构。其他需要访问该数据结构的进程必须等到它们获得锁存器后。不同于排队 的是,请求锁存器的进程不需要在队列中等待。如果获取锁存器失败,则进程仅仅等待一小段时 间就可以再次请求锁存器。这一小段等待时间成为“自旋”(spin)。如果在一次或多次自旋重复 (spin iterations)之后还没获取锁存器,进程就休眠一小段时间,然后再次尝试获取锁存器, 接下来休眠更长一段时间,直到获得锁存器。 最常见的锁存器有:cache buffer chains(高速缓存缓冲区链)、library cache(高速缓存) 和shared pool(共享池)。 1、等待参数 latch free的等待参数描述如下: ◎ P1 进程等待的锁存器地址。 ◎ P2 锁存器号,同v$latchname.latch# 要查找等待锁存器的名称,可以是哟功能如下SQL语句: SELECT * FROM v$latchname WHERE latch# = & 2_Value; ◎ P3 尝试的次数;显示进程试图获取锁存器的次数计数器。 2、等待时间 该时间的等待时间呈指数级增长。他不包含进程为锁存器自旋(spin)