java技术圈 为您找到相关结果 130

ThreadLocalMap里Entry为何声明为WeakReference? - waterystone

Java里,每个线程都有自己的ThreadLocalMap,里边存着自己私有的对象。Map的Entry里,key为ThreadLocal对象,value即为私有对象T。在spring MVC中,常用ThreadLocal保存当前登陆用户信息,这样线程在任意地方都可以取到用户信息了。 public class UserContext { private static final ThreadLocal userInfoLocal = new ThreadLocal(); public static UserInfo getUserInfo() { return userInfoLocal.get(); } public static void setUs...阅读全文

博文 2021-04-27 05:58:59 博客园

Windows线程管理和调度机制概述_m_buddy的博客

1. 线程管理 (1)线程,有时被称为轻量级进程,是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针,寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。 (2)进程(Process)定义了一个执行环境,包括它自己私有的地址空间、一个句柄表,以及一个安全环境;线程(thread)则是一个控制流,有自己的调用栈(call stack),记录了执行的历史。每个进程都包含一个或多个线程,当进程被初始化创建时系统为该进程创建第一个线程;当最后一个线程结束时,进程也随之结束。 说道这里就需要说到线程的工作模式: 进程中的线程既可以在用户模式下运...阅读全文

博文 2020-07-14 02:25:32 CSDN博客_windows线程调度

JDWP 协议及实现 – IBM Developer

byte 1 byte byte 值。 boolean 1 byte 布尔值,0 表示假,非零表示真。 int 4 byte 4 字节有符号整数。 long 8 byte 8 字节有符号整数。 objectID 依据 target Java 虚拟机而定,最大 8 byte Target Java 虚拟机中对象(object)的唯一 ID。这个值在整个 JDWP 的会话中不会被重用,始终指向同一个对象,即使该对象已经被 GC 回收(引用被回收的对象将返回 INVALID_OBJECT 错误。 Tagged-objectID objectID 的长度加 1 第一个 byte 表示对象的类型,比如,整型,字符串,类等等。紧接着是一个 objectID。 threadID 同 objectID 的长...阅读全文

博文 2020-08-13 06:42:57 developer.ibm.com

Storm、Spark与Flink详细比较

TIP 本文主要是介绍 Storm、Spark与Flink详细比较 。 Storm,Spark和Flink简介 联系与区别1、Apache Storm2、Spark Streaming3、Flink4、三者对比参考文章 # Storm,Spark和Flink简介 联系与区别 storm、spark streaming、flink是三个最著名的分布式流处理框架,并且都是开源的分布式系统,具有低延迟、可扩展和容错性诸多优点,允许你在运行数据流代码时,将任务分配到一系列具有容错能力的计算机上并行运行,都提供了简单的API来简化底层实现的复杂程度。 # 1、Apache Storm Storm是一个免费并开源的分布式实时计算系统。利用Storm可以很容易做到可靠地处理无限的数据流,像Hadoop批量...阅读全文

博文 2021-12-24 14:07:04 智能后端和架构

Netty 中的 Future & Promise

Netty 源码中大量使用了异步编程,从代码实现角度看就是大量使用了线程池和 Future。熟悉 Java 5 的同学一定对 Future 不陌生。简单来说就是其代表了一个异步任务,任务将在未来某个时刻完成,而 Future 这个接口就是用来提供例如获取接口、查看任务状态等功能。Netty 扩展了 Java 5 引入的 Future 机制。从下面的类图我们可以看到相关类的关系:Netty 的 Future 接口需要注意的是,上面类图中有两个 Future,最上面的是 java.util.concurrent.Future,而其下面的则是 io.netty.util.concurrent.Future。JDK 的 Future 对象,该接口的方法如下:// 取消异步操作 boolean can...阅读全文

博文 2021-08-29 03:33:12 www.linkedkeeper.com

1.5w字,30图带你彻底掌握 AQS!

点击上方"云时代架构", 右上角选择“设为星标”精品技术文章准时送上!前言AQS( AbstractQueuedSynchronizer )是一个用来构建锁和同步器(所谓同步,是指线程之间的通信、协作)的框架,Lock 包中的各种锁(如常见的 ReentrantLock, ReadWriteLock), concurrent 包中的各种同步器(如 CountDownLatch, Semaphore, CyclicBarrier)都是基于 AQS 来构建,所以理解 AQS 的实现原理至关重要,AQS 也是面试中区分侯选人的常见考点,我们务必要掌握,本文将用循序渐近地介绍 AQS,相信大家看完一定有收获。文章目录如下锁原理 - 信号量 vs 管程AQS 实现原理AQS 源码剖析如何利用 AQS ...阅读全文

博文 2021-06-16 02:52:41 墨天轮

Java JVM 参数设置大全

首页 > 基础教程 > 基础知识 > JDK&JRE&JVM Java JVM 参数设置大全 JVM参数设置说明 参数名称 含义 默认值 -Xms 初始堆大小 物理内存的1/64(<1GB) 默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制. -Xmx 最大堆大小 物理内存的1/4(<1GB) 默认(MaxHeapFreeRatio参数可以调整)空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制 -Xmn 年轻代大小(1.4or lator) 注意:此处的大小是(eden+ 2 survivor space).与jmap -heap中显示的New gen是不同的。 整个堆大小=年轻代大小 + 年老代大小 + 持久代...阅读全文

博文 2020-07-28 06:53:23 www.51gjie.com

从实际案例聊聊Java应用的GC优化

当Java程序性能达不到既定目标,且其他优化手段都已经穷尽时,通常需要调整垃圾回收器来进一步提高性能,称为GC优化。但GC算法复杂,影响GC性能的参数众多,且参数调整又依赖于应用各自的特点,这些因素很大程度上增加了GC优化的难度。即便如此,GC调优也不是无章可循,仍然有一些通用的思考方法。本篇会介绍这些通用的GC优化策略和相关实践案例,主要包括如下内容: > 优化前准备: 简单回顾JVM相关知识、介绍GC优化的一些通用策略。 > 优化方法: 介绍调优的一般流程:明确优化目标→优化→跟踪优化结果。 > 优化案例: 简述笔者所在团队遇到的GC问题以及优化方案。一、优化前的准备GC优化需知为了更好地理解本篇所介绍的内容,你需要了解如下内容。 1. GC相关基础知识,包括但不限于: a) GC工作原...阅读全文

博文 2020-08-01 04:17:44 美团技术团队

Netty 中的异步编程 Future 和 Promise - rickiyang

Netty 中大量 I/O 操作都是异步执行,本篇博文来聊聊 Netty 中的异步编程。 Java Future 提供的异步模型 JDK 5 引入了 Future 模式。Future 接口是 Java 多线程 Future 模式的实现,在 java.util.concurrent包中,可以来进行异步计算。 对于异步编程,我们想要的实现是:提交一个任务,在任务执行期间提交者可以做别的事情,这个任务是在异步执行的,当任务执行完毕通知提交者任务完成获取结果。 那么在 Future 中是怎么实现的呢?我们先看接口定义: public interface Future { boolean cancel(boolean mayInterruptIfRunning); boolean isCance...阅读全文

博文 2021-08-29 03:35:05 博客园

Java阻塞延迟队列DelayQueue原理及使用_Hopefully Sky的博客

阻塞队列 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,从队列中获取元素的消费者线程会一直等待直到队列变为非空。当队列满时,向队列中放置元素的生产者线程会等待直到队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。 在阻塞队列不可用时,这两个附加操作提供了4种处理方式: 抛出异常:当队列满时,插入元素会抛出IllegalStateException;返回特殊值:offer()是入队方法,当插入成功时返回true,插入失败返回false;poll()是出队方法,当出队成功时返回元素的值,队列为空时返回null一直阻塞:当队列满时,阻塞执行插入方法的线程;当队列空时,阻塞执行出队方法的...阅读全文

博文 2021-09-24 03:45:20 CSDN博客_java 延迟队列

【译】深入理解G1的GC日志(一)

本文翻译自:www.redhat.com/en/blog/col… 这篇文章将深入研究G1的日志和调优参数。为了在实际工作中对G1进行调优,作为开发者的你需要理解G1垃圾收集器的每个步骤,以及每个步骤在整个垃圾收集周期中的作用。为了方便读者学习,这篇文章将G1的日志参数分为等级递增的三块,这篇文章将会分别介绍每一部分参数的作用和调优时候使用的场景。 基础参数 - 在生产中使用G1收集器,必须使用这些参数 高级参数 - 随着应用的成熟或业务负载的增加,需要使用这些参数针对某些问题进行调优。 Debug参数 - 这些参数是用来解决特定的性能问题,如果某个问题在非生产环境中无法复现,才会在生产环境中使用这些参数排查问题。 基础参数 如果你要在生产环境中使用G1 GC,下面这些跟日志相关的参数是必备...阅读全文

博文 2020-07-31 06:28:03 掘金

为什么Redis单线程还这么快?

众所周知,Redis在内存库数据库领域非常地火热,它极高的性能和丰富的数据结构为我们的开发提供了极大的便利。 但我们也听说了,Redis是单线程的,为什么采用单线程的Redis也会如此之快呢?这篇文章我们来分析一下其中的缘由。 其实,严格来说,Redis Server是多线程的,只是它的请求处理整个流程是单线程处理的。这一点我们一定要清楚了解到,不要单纯地认为Redis Server是单线程的! 我们平时说的Redis单线程快是指它的请求处理过程非常地快! 下面我们就来分下一下为什么请求处理使用单线程,依旧可以达到这么高的性能。 Redis的性能非常之高,每秒可以承受10W+的QPS,它如此优秀的性能主要取决于以下几个方面: 纯内存操作 使用IO多路复用技术 非CPU密集型任务 单线程的优势...阅读全文

博文 2021-08-18 07:27:13 Kaito's Blog

Linux网络编程 | 并发模式:半同步/半异步模式、领导者/追随者模式

文章目录 同步与异步 半同步/半异步模式 变体:半同步/半反应堆模式 改进:更高效的半同步/半异步模式 领导者/追随者模式 组件 :句柄集、线程集、事件处理器 并发模式是指I/O处理单元和多个逻辑单元之间协调完成任务的方法。服务器主要有两种并发编程模式:半同步/半异步模式(half-sync/half-async)模式和领导者/追随者(Leader/Followers)模式 同步与异步 首先在这里要指出,这里的"同步"和“异步”与I/O模型中的”同步I/O“与“异步I/O”是两个完全不同的概念,不能将其混淆。 在I/O模型中,”同步I/O“和”异步I/O“主要的区别就是内核向应用程序通知的是哪种I/O事件(就绪事件/完成事件),以及由谁来完成I/O的读写操作(应用程序/内核)。 同步I/O:...阅读全文

博文 2021-08-16 07:49:23 码农家园

使用 Delete By Query API 的方式删除ES索引中的数据 - 腾讯云开发者社区

一、前言| ES作为现今最流行的搜索存储库,我们需要定期去清理ES集群的数据以保证集群处在一个最佳负载状态,那么如何去删除这些数据呢,我们今天来介绍一种比较常见的通过Delete By Query的方式去删除索引中的数据。二、Delete By Query API 介绍 怎么理解这个API呢?实际是批量删除数据的意思 功能:根据特定的查询条件对ES相关索引中某些特定的文档进行批量删除。POST index_name/_delete_by_query { "query": { //这些是自定义查询条件,根据查询条件去批量删除 "match": {//请求体跟Search API是一样的 "message": "some message" } } }复制Delete By Query 删除原理:...阅读全文

博文 2022-08-24 07:40:44 腾讯云

如何理解BIO、NIO、AIO的区别?

很多文章在谈论到BIO、NIO、AIO的时候仅仅是抛出一堆定义,以及一些生动的例子。看似很好理解。但是并没有将最基础的本质原理显现出来,如果没有没有从IO的原理出发的话是很难理解这三者之间的区别的。所以本篇文章从Java是如何进行IO操作为开头进行分析。 Java中的IO原理 首先Java中的IO都是依赖操作系统内核进行的,我们程序中的IO读写其实调用的是操作系统内核中的read&write两大系统调用。 那内核是如何进行IO交互的呢? 网卡收到经过网线传来的网络数据,并将网络数据写到内存中。 当网卡把数据写入到内存后,网卡向cpu发出一个中断信号,操作系统便能得知有新数据到来,再通过网卡中断程序去处理数据。 将内存中的网络数据写入到对应socket的接收缓冲区中。 当接收缓冲区的数据写好之...阅读全文

博文 2021-08-16 03:05:31 juejin.cn

Flink task和subTask_大数据私房菜的博客

Flink-Task、SubTask、并行度 ldc2013的博客 08-01 292 Task与SubTask 一个算子就是一个Task. 一个算子的并行度是几,这个Task就有几个SubTask 对应关系: 算子=Task 并行度=SubTask task是抽象概念,subtask是物力概念 Parallelism并行度 默认并行度--cpu核数 关键点 不同的并行度(subtask),肯定在不同的slot,但也可能在不同的taskmanager 一个流程序的并行度,可以认为就是其所有算子中算子并行度最大的并行度 数据传输模式: One-to-one:. 【白话Flink基础理论】Flink运行时(Runtime)架构(三)并行度&Task&SubTask&Slot&Flink中的并行剖...阅读全文

博文 2022-08-04 06:54:20 CSDN博客_flink subtask

干货 | Elasticsearch Reindex性能提升10倍+实战_铭毅天下的博客

Elasticsearch 最少必要知识实战教程直播回放 #1、reindex的速率极慢,是否有办法改善? 以下问题来自社区:https://elasticsearch.cn/question/3782 问题1:reindex和snapshot的速率极慢,是否有办法改善? reindex和snapshot的速率比用filebeat或者kafka到es的写入速率慢好几个数量级(集群写入性能不存在瓶颈),reindex/snapshot的时候CPU还是IO使用率都很低,是不是集群受什么参数限制了reindex和snapshot的速率? reindex不管是跨集群还是同集群上都很慢,大约3~5M/s的索引速率,会是什么原因导致的? 问题2:数据量几十个G的场景下,elasticsearch rei...阅读全文

博文 2022-04-02 10:12:57 CSDN博客_es reindex速度

Flink 中 slot ,task,并行度的详解及其高频面试题

点击上方蓝字关注一下吧 看完记得点个关注呦~,了解更多职场及大数据,人工智能,java等技术文章。 在了解slot、task、并行度相关概念和原理之前先看一下企业中与之相关的高频面试题×01高频面试题1.Flink的并行度了解吗?Flink的并行度设置是怎样的?2.任务并行度与slot之间的关系?3.Flink并行度设置优先级?4.并行的任务,需要占用多少slot?5. slot并行的条件?6. taskmanager与slot之间的关系?7.什么是slot共享,slot共享的好处?8.一个流处理程序,到底包含多少个任务? 接下来的介绍相信你会对这些问题有一个答案,当然文章最后也有对应的参考答案×02 概念解读taskmanager:Flink中每一个worker(TaskManager)都...阅读全文

博文 2022-08-04 07:04:07 墨天轮

CSP和Actor两种并发模型分析 - _Eternity味道

背景 在多核CPU机器下,为了充分利用多核计算机的资源,我们需要进行并发编程,提高对CPU的利用率, # 提示:如你已了解或无意了解并行和并发,可以跳过本段,直达标题 ”传统并发和基于消息传递的并发“ 并行(parallel): 物理上同一时间处理不同任务 并发(concurrent): 逻辑上处理同时的任务的能力 通常所说的并发编程,也就是说它允许多个任务同时执行,但实际上并不一定在同一时刻被执行。 在单核处理器上,通过多线程共享CPU时间片串行执行(并发非并行)。 而并行则依赖于多核处理器等物理资源,让多个任务可以实现并行执行(并发且并行)。 如下是一些编程语言,以及它们相应的并发机制: Actors Model — Erlang, Scala, Rust CSP — Go-lang 多...阅读全文

博文 2022-11-13 08:00:25 博客园

Kafka组消费之Rebalance机制 - 云+社区

《Kafka重要知识点之消费组概念》讲到了kafka的消费组相关的概念,消费组有多个消费者,消费组在消费一个Topic的时候,kafka为了保证消息消费不重不漏,kafka将每个partition唯一性地分配给了消费者。但是如果某个消费组在消费的途中有消费者宕机或者有新的消费者加入的时候那么partition分配就是不公平的,可能导致某些消费者负载特别重,某些消费者又没有负载的情况。Kafka有一种专门的机制处理这种情况,这种机制称为Rebalance机制。当kafka遇到如下四种情况的时候,kafka会触发Rebalance机制:消费组成员发生了变更,比如有新的消费者加入了消费组组或者有消费者宕机消费者无法在指定的时间之内完成消息的消费消费组订阅的Topic发生了变化订阅的Topic的pa...阅读全文

博文 2022-03-23 12:52:43 腾讯云

处理netstat中获取不到pid的进程

一般查看一台服务器,为了查看一台机器上运行的端口及监听的服务,常会用到netstat -luntp这个命令。 但是不是每一个运行的进程都能有pid显示,今天就遇到如下情况: 1、通过netstat 中加入一个e得参数查看,启动对应端口的用户。 netstat -letnp|grep 2049 tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN 0 109911170 - tcp6 0 0 :::2049 :::* LISTEN 0 109911174 - 2、通过lsof -i:port 查看出,占用端口中启动的程序。 root@iZ239fkpuw4Z:~# lsof -i:2049 root@iZ239fkpuw4Z:~# 3、另一种可能是,这是一个内核线程,这没...阅读全文

博文 2023-08-01 07:02:20 阿里云开发者社区

Flink 助力美团数仓增量生产

一、美团数仓架构图如上图,是美团最新的数仓架构图。整个架构图分为三层,从下往上看,最下面一层是数据安全,包括受限域认证系统、加工层权限系统,应用层权限系统,安全审计系统,来保证最上层数据集成与处理的安全;中间一层是统一的元数据中心和全链路血缘,覆盖了全链路的加工过程;最上层根据数据的流向,分成数据集成,数据处理,数据消费,数据应用,四个阶段;在数据集成阶段,对于不同的数据来源(包括用户行为数据,日志数据,DB 数据,文件数据),都有相对应的数据集成系统,把数据收集到统一的存储之中,包括 Kafka 和 Hive 等。在数据处理阶段,有一个面向用户的数据开发平台(万象平台),可以使用两条数据处理链路来加工数据,一个是流式处理链路,一个是离线处理链路。数据加工好了之后,使用内部自研的 Delta...阅读全文

博文 2022-03-23 12:52:23 知乎

java线程wait_Java线程中wait状态和block状态的区别?_weixin_39521835的博客

Thread is in the Blocked state while waiting for the monitor lock to enter a synchronized block or method or to reenter a synchronized block or method after calling Object.wait(). 这个地方是说synchronized会导致线程进入Blocked状态,Object.wait()导致线程进入Waiting状态,Waiting线程被其他线程调用Object.notify()唤醒之后,重新获取对象上的锁的时候也会进入Blocked状态 * The current thread must own this object's ...阅读全文

博文 2022-03-23 12:56:36 CSDN博客

深入理解Akka actor模型

Carl Hewitt 在1973年对Actor模型进行了如下定义:"Actor模型是一个把'Actor'作为并发计算的通用原语". Actor是异步驱动,可以并行和分布式部署及运行的最小颗粒。也就是说,它可以被分配,分布,调度到不同的CPU,不同的节点,乃至不同的时间片上运行,而不影响最终的结果。因此Actor在空间(分布式)和时间(异步驱动)上解耦的。而Akka是Lightbend(前身是Typesafe)公司在JVM上的Actor模型的实现。我们在了解actor模型之前,首先来了解actor模型主要是为了解决什么样的问题。Why modern systems need a new programming model在akka系统的官网上主要介绍了现代并发编程模型所遇到的问题,里面主要提...阅读全文

博文 2023-01-30 02:39:50 知乎

IO设计模式:Actor、Reactor、Proactor - _raindrop

先看看io模型 先介绍两种高性能服务器模型Reactor、Proactor Reactor模型: 1 向事件分发器注册事件回调 2 事件发生 4 事件分发器调用之前注册的函数 4 在回调函数中读取数据,对数据进行后续处理 Reactor模型实例:libevent,Redis、ACE Proactor模型: 1 向事件分发器注册事件回调 2 事件发生 3 操作系统读取数据,并放入应用缓冲区,然后通知事件分发器 4 事件分发器调用之前注册的函数 5 在回调函数中对数据进行后续处理 Preactor模型实例:ASIO reactor和proactor的主要区别: 主动和被动 以主动写为例: Reactor将handle放到select(),等待可写就绪,然后调用write()写入数据;写完处理后续...阅读全文

博文 2023-02-02 04:00:37 博客园

高性能队列——Disruptor

背景Disruptor是英国外汇交易公司LMAX开发的一个高性能队列,研发的初衷是解决内存队列的延迟问题(在性能测试中发现竟然与I/O操作处于同样的数量级)。基于Disruptor开发的系统单线程能支撑每秒600万订单,2010年在QCon演讲后,获得了业界关注。2011年,企业应用软件专家Martin Fowler专门撰写长文介绍。同年它还获得了Oracle官方的Duke大奖。目前,包括Apache Storm、Camel、Log4j 2在内的很多知名项目都应用了Disruptor以获取高性能。在美团技术团队它也有不少应用,有的项目架构借鉴了它的设计机制。本文从实战角度剖析了Disruptor的实现原理。需要特别指出的是,这里所说的队列是系统内部的内存队列,而不是Kafka这样的分布式队列...阅读全文

博文 2023-03-03 02:58:41 美团技术团队

MySQL 优化系列(1)-- InnoDB重要参数优化 - 散尽浮华

1.简单介绍InnoDB给MySQL提供了具有提交,回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非锁定读。这些特色增加了多用户部署和性能。没有在InnoDB中扩大锁定的需要,因为在InnoDB中行级锁定适合非常小的空间。InnoDB也支持FOREIGN KEY强制。在SQL查询中,你可以自由地将InnoDB类型的表与其它MySQL的表的类型混合起来,甚至在同一个查询中也可以混合。 2.之所以选用innodb作为存储引擎的考虑目前来说,InnoDB是为Mysql处理巨大数据量时的最大性能设计。它的CPU效率可能是任何其它基于磁盘的关系数据库引擎所不能匹敌的。在数据量大的网站或是应用中Innodb是倍受青睐的。...阅读全文

博文 2023-09-13 16:39:23 博客园

Linux高性能IO网络模型对比分析:Reactor vs Proactor - 腾讯云开发者社区

1、前言 随着互联网的发展,面对海量用户高并发业务,传统的阻塞式的服务端架构模式已经无能为力。本文旨在为大家提供有用的高性能网络编程的I/O模型概览以及网络服务进程模型的比较,以揭开设计和实现高性能网络架构的神秘面纱。 2、关于作者 陈彩华(caison):主要从事服务端开发、需求分析、系统设计、优化重构工作,主要开发语言是 Java。 3、线程模型 上篇《高性能网络编程(五):一文读懂高性能网络编程中的I/O模型》介绍完服务器如何基于 I/O 模型管理连接,获取输入数据,下面将介绍基于进程/线程模型,服务器如何处理请求。 值得说明的是,具体选择线程还是进程,更多是与平台及编程语言相关。 例如 C 语言使用线程和进程都可以(例如 Nginx 使用进程,Memcached 使用线程),Java...阅读全文

博文 2023-02-02 03:59:47 腾讯云

Actor模型是解决高并发的终极解决方案

写在开始一般来说有两种策略用来在并发线程中进行通信:共享数据和消息传递。使用共享数据方式的并发编程面临的最大的一个问题就是数据条件竞争。处理各种锁的问题是让人十分头痛的一件事。 传统多数流行的语言并发是基于多线程之间的共享内存,使用同步方法防止写争夺,Actors使用消息模型,每个Actor在同一时间处理最多一个消息,可以发送消息给其他Actor,保证了单独写原则。从而巧妙避免了多线程写争夺。和共享数据方式相比,消息传递机制最大的优点就是不会产生数据竞争状态。实现消息传递有两种常见的类型:基于channel(golang为典型代表)的消息传递和基于Actor(erlang为代表)的消息传递。Actor简介Actor模型(Actor model)首先是由Carl Hewitt在1973定义, ...阅读全文

博文 2023-02-02 04:03:37 知乎

高性能无锁并发框架Disruptor,太强了

Disruptor是一个开源框架,研发的初衷是为了解决高并发下队列锁的问题,最早由LMAX提出并使用,能够在无锁的情况下实现队列的并发操作,并号称能够在一个线程里每秒处理6百万笔订单官网:http://lmax-exchange.github.io/disruptor/目前,包括Apache Storm、Camel、Log4j2在内的很多知名项目都应用了Disruptor以获取高性能为什么会产生Disruptor框架「目前Java内置队列保证线程安全的方式:」ArrayBlockingQueue:基于数组形式的队列,通过加锁的方式,来保证多线程情况下数据的安全;LinkedBlockingQueue:基于链表形式的队列,也通过加锁的方式,来保证多线程情况下数据的安全;ConcurrentLi...阅读全文

博文 2023-02-02 12:22:37 知乎

HBase 参数设置参考

HBase 参数设置参考 前言HBase 配置参数极其繁多,参数配置可能会影响到 HBase 性能问题,因此得好好总结下。 HBase 调优是个技术活。得结合多年生产经验加测试环境下性能测试得出。 JVM垃圾回收优化 本地 memstore 分配缓存优化 Region 拆分优化 Region 合并优化 Region 预先加载优化 负载均衡优化 启用压缩,推荐snappy 进行预分区,从而避免自动 split,提高 HBase 响应速度 避免出现 region 热点现象,启动按照 table 级别进行 balance GCHBase CMS GC 配置参考 RS 参数hbase.server.thread.wakefrequency 该值默认是 10 秒,它影响着 Flush 和 Compac...阅读全文

博文 2023-09-21 14:58:57 lihuimintu

kafka是如何保证消息不丢失的 - 腾讯云开发者社区

今天和大家聊一下,kafka对于消息的可靠性保证。作为消息引擎组件,保证消息不丢失,是非常重要的。 那么kafka是如何保证消息不丢失的呢?前提条件任何消息组件不丢数据都是在特定场景下一定条件的,kafka要保证消息不丢,有两个核心条件。第一,必须是已提交的消息,即committed message。kafka对于committed message的定义是,生产者提交消息到broker,并等到多个broker确认并返回给生产者已提交的确认信息。而这多个broker是由我们自己来定义的,可以选择只要有一个broker成功保存该消息就算是已提交,也可以是令所有broker都成功保存该消息才算是已提交。不论哪种情况,kafka只对已提交的消息做持久化保证。第二,也就是最基本的条件,虽然kafka集...阅读全文

博文 2023-02-27 12:28:51 腾讯云

hbase关于flush和compact参数

hbase 2.2.6 3 hmasters ,400+ regionservers,about 80w regions, totoal hfiles compressed 20PB ,uncompressed 80P (cores40 内存187.4G 磁盘150T)/nodes 主要写入操作bulkload与put,日写入150T Regionserver 堆内存60G 1. hbase flush 和 compact对写的影响 简单说: 写数据时会先写到memstore 当memstore写满或达到其它flush触发条件,memstore刷写生成hfile 当flush时发现store下文件数超过该值hbase.hstore.blockingStoreFiles=16,会报too ma...阅读全文

博文 2023-09-21 14:59:28 jiazz's blog

如此狂妄,自称高性能队列的Disruptor有啥来头? - 博学谷狂野架构师

并发框架Disruptor 1. Disruptor概述 1.1 背景 ​ Disruptor是英国外汇交易公司LMAX开发的一个高性能队列,研发的初衷是解决内存队列的延迟问题(在性能测试中发现竟然与I/O操作处于同样的数量级),基于Disruptor开发的系统单线程能支撑每秒600万订单,2010年在QCon演讲后,获得了业界关注,2011年,企业应用软件专家Martin Fowler专门撰写长文介绍。同年它还获得了Oracle官方的Duke大奖。 ​ 目前,包括Apache Storm、Camel、Log4j 2在内的很多知名项目都应用了Disruptor以获取高性能。 ​ 需要特别指出的是,这里所说的队列是系统内部的内存队列,而不是Kafka这样的分布式队列。 有界无锁 高并发队列 1...阅读全文

博文 2023-03-03 02:58:58 博客园

分布式时序数据库 - LinDB

背景饿了么对时序数据库的需求主要来自各监控系统,主要用于存储监控指标。原来使用graphite,后来慢慢有对指标有多维的需求(主要体现在对一个指标加多个Tag, 来组成Series,然后对Tag进行Filter和Group进行计算),这时graphite基本很难满足需求。业界现在用的比较多的主要有如下几类TSDB:InfluxDB:很多公司都在用,包括饿了么有部分监控系统也是用InfluxDB。优点,支持多维和多字段,存储也根据TSDB的特点做了优化。但开源的部分不支持,很多公司自己做集群化, 但大多基于指标名来,这样会有单指的热点问题。现在饿了么也是类似的做法,但热点问题很严重,大的指标已经用了最好的服务器,但是查询性能还是不够理想, 如果做成按Series Sharding那成本还是有一...阅读全文

博文 2023-04-19 07:41:25 知乎

jvm监控指标 - 求其在我

# HELP jvm_gc_collection_seconds Time spent in a given JVM garbage collector in seconds.# TYPE jvm_gc_collection_seconds summary#这是一个Summary指标,与Histogram类似,可以对指标数据进行采样 # 并发收集器 CMS(Concurrent Mark-Sweep) 以牺牲吞吐量为代价来获得最短回收停顿时间的垃圾回收器对于要求服务器响应速度的应用上,这种垃圾回收器非常适合。CMS是用于对tenured generation的回收,也就是年老代的回收,目标是尽量减少应用的暂停时间,减少full gc发生的几率,利用和应用程序线程并发的垃圾回收线程来标记清除年...阅读全文

博文 2023-09-22 16:07:14 博客园

[从零单排HBase 07]如何正确管理HBase的连接,从原理到实战

本文将介绍HBase的客户端连接实现,并说明如何正确管理HBase的连接。最近在搭建一个HBase的可视化管理平台,搭建完成后发现不管什么查询都很慢,甚至于使用api去listTable都要好几秒。经过一番排查发现,是每次请求的时候,都去临时创建了一个connection,而创建connection非常耗时导致整体的rt上升。因此,就深入了解了下如何正确管理HBase的connection,同时,也在优化过程中有些小细节的总结。本文基于hbase 2.0.0版本的源码,github上3.0版本的源码已经有很大差异了,但是思想还是差不多的1.HBase-client和HBase是如何连接的?这个问题实际上在我之前的文章 深入HBase读写 中介绍过。当HBase-client第一次请求读写的时...阅读全文

博文 2023-05-16 11:19:59 掘金

Java 魔法类 Unsafe 详解

本文整理完善自下面这两篇优秀的文章:Java 魔法类:Unsafe 应用解析 - 美团技术团队 -2019open in new windowJava 双刃剑之 Unsafe 类详解 - 码农参上 - 2021open in new window阅读过 JUC 源码的同学,一定会发现很多并发工具类都调用了一个叫做 Unsafe 的类。那这个类主要是用来干什么的呢?有什么使用场景呢?这篇文章就带你搞清楚!# Unsafe 介绍Unsafe 是位于 sun.misc 包下的一个类,主要提供一些用于执行低级别、不安全操作的方法,如直接访问系统内存资源、自主管理内存资源等,这些方法在提升 Java 运行效率、增强 Java 语言底层资源操作能力方面起到了很大的作用。但由于 Unsafe 类使 Jav...阅读全文

博文 2023-05-23 09:57:08 JavaGuide(Java面试 + 学习指南)

线程池的getActiveCount()不准确问题

线程池的getActiveCount()不准确问题 getActiveCount () 按照 javadocs 的说法是 “Returns the approximate number of threads that are actively executing tasks.” 也就是“返回正在执行任务的大致线程数”,请注意用词 approximate 。 查看一下源码: public int getActiveCount() { final ReentrantLock mainLock = this.mainLock; mainLock.lock(); try { int n = 0; for (Worker w : workers) if (w.isLocked()) ++n; retu...阅读全文

博文 2023-10-25 13:55:46 CSDN博客

一种提升SQL改写效率的方法

本文分享自天翼云开发者社区《一种提升SQL改写效率的方法》,作者:唐****律一、背景SQL改写是数据库产品中使用比较频繁的一个技术,在大多数产品中的调用频率也非常高,通常对性能的需求需要接近对应数据库产品的上限。例如在天翼云关系型数据库中的Mysql语法兼容组件,其性能测试标准需要达到接近30万TPS,也意味着SQL改写环节的性能标准需要支持至少每秒30万次以上,否则会成为系统的性能瓶颈。SQL改写的基础是抽象语法树,而抽象语法树则是由SQL字符串经过词法分析和语法分析之后得到的。词法分析器和语法分析器在市面上有非常多的种类可供挑选,例如Lexer、YACC、Antlr、Druid等,一般数据库产品都只在其基础上进行SQL改写,例如基于C语言开发的PG的分布式数据库插件Citus。对于一些...阅读全文

博文 2023-09-28 16:23:21 Tianyiyun

一次鞭辟入里的 Log4j2 日志输出阻塞问题的定位

问题现象 线上某个应用的某个实例突然出现某些次请求服务响应极慢的情况,有几次请求超过 60s 才返回,并且通过日志发现,服务线程并没有做什么很重的操作。这种情况断断续续持续了半小时左右。 核心问题定位 由于半小时后,服务实例恢复正常,并且出现请求极慢的次数并不太多,没有能及时打印出现问题的时候线程堆栈采集相关信息。但是,我们有自己的法宝,JFR(关于 JFR,请参考我的另一系列JFR全解)。 JFR 非常适合用来事后复盘定位问题,并且配置得当的话,性能损耗极小,并且不像 APM 系统一样需要额外的采集以及需要统一的服务进程进行整合展现。我们随用随取即可,但是 JFR 面向的是单进程的问题定位,找到问题进程,定位跨进程业务问题链路追踪还是需要 APM 系统的。 我们通过如下命令采集对应时间段的...阅读全文

博文 2023-05-19 03:51:27 HeapDump性能社区

【完结17章】JVM七大核心系统精讲 从基础理论到高级应用

【完结17章】JVM七大核心系统精讲 从基础理论到高级应用 今天给大家讲解一下关于JVM的知识内容,希望对大家在学习JVM的过程中遇到的问题有所帮助,以下是参考资料下载: JVM运行机制概述 类加载机制: 类加载过程由类加载器来完成,即由ClassLoader及其子类实现,有隐式加载和显式加载两种方式。隐式加载是指在使用new等方式创建对象时会隐式调用类加载器把对应的类加载到JVM中;显式加载是指通过直接调用Class.forName()把对应的类加载到JVM中。 内存模型(运行时数据区):共享区【方法区、堆】、私有区【虚拟机栈、本地方法栈、程序计数器】、直接内存(不受JVM GC管理)。其中程序计数器是唯一不会出现OOM的内存区。 执行引擎:即时编译器、垃圾收集器(按代回收算法:新生代-复...阅读全文

博文 2023-11-21 23:23:24 woaiwodejia333

HBase原理 | HBase Compaction介绍与参数调优-腾讯云开发者社区

我们知道,数据达到HBase服务端会写WAL-写Memstore,然后定期或满足一定条件时刷写磁盘生成一个HFile文件,随着时间推移生成的HFile会越来越多,将会影响HBase查询性能,同时会对HDFS造成一定影响。因此HBase会定期执行Compaction操作以合并减少HFile数量。1.两种合并HBase中Compaction分为两种。Minor Compaction称为小合并,主要是选取一些小的、相邻的HFile将他们合并成较大的HFile,并删除HFile中的过期数据。Major Compaction称为大合并,会将一个列族下的所有HFile合并成一个大的HFile,同时删除过期数据、已删除数据(打了Delete标记的)、版本过大的数据等三类无效数据。2. 参数调优1).hba...阅读全文

博文 2023-09-21 14:59:11 腾讯云

虚拟化技术 - CPU虚拟化

本文分享自天翼云开发者社区《虚拟化技术 - CPU虚拟化》,作者:谢****悦物理机器是由CPU,内存和I/O设备等一组资源构成的实体。虚拟机也一样,由虚拟CPU,虚拟内存和虚拟I/O设备等组成。VMM(VM Monitor)按照与传统OS并发执行用户进程的相似方式,仲裁对所有共享资源的访问。本文将分别讨论CPU虚拟化、内存虚拟化和I/O虚拟化技术的原理和实现。在虚拟化的平台上,虚拟机(guest VM)所使用的多个虚拟CPU(以下称vCPU)可能是共享同一个物理CPU(以下称pCPU)的。VMM负责vCPU的调度,当一个vCPU被调度到获得pCPU的使用权后,基于该vCPU运行的guest OS又可以调度OS中的各个线程/进程了。也就是说,guest OS中的各个线程/进程分时复用了vCP...阅读全文

博文 2023-05-19 09:35:52 Tianyiyun

一文告诉你Java日期时间API到底有多烂 - YourBatman

前言 你好,我是A哥(YourBatman)。 好看的代码,千篇一律!难看的代码,卧槽卧槽~其实没有什么代码是“史上最烂”的,要有也只有“史上更烂”。 日期是商业逻辑计算的一个关键部分,任何企业的程序都需要正确的处理日期时间问题,否则很可能带来事故和损失。为此本系列仅着眼于这一个点就写了好几篇文章,目的是帮助你系统化的搞定所有问题/难题。 平时我们都热衷于吐槽同事的代码有多烂,今天我们就来玩点狠的:吐槽吐槽JDK,看看它的日期时间API设计得到底有多烂。 说明:本文指的日期时间API是Date/Calendar系列,而非Java 8新的API。毕竟一般我们称后者为JSR 310日期时间,请注意区分哈 本文提纲 版本约定 JDK:8 正文 诚然,Java的API绝大多数设计得都是非常优秀且成功...阅读全文

博文 2023-05-22 08:08:55 博客园

可以使用 Instant 代替 Date , LocalDateTime 代替 Calendar,DateTimeFormatter 代替 SimpleDateFormat - 周文豪

DateFormat 类是一个非线程安全的类。javadocs 文档里面提到:"Date formats是不能同步的。 我们建议为每个线程创建独立的日期格式。 如果多个线程同时访问一个日期格式,这需要在外部加上同步代码块。" 如何并发使用DateFormat类? 1. 同步 最简单的方法就是在做日期转换之前,为DateFormat对象加锁。这种方法使得一次只能让一个线程访问DateFormat对象,而其他线程只能等待。 public class DateUtil { private static final String MESSAGE_FORMAT = "MM-dd HH:mm:ss.ms"; private static final SimpleDateFormat format=new...阅读全文

博文 2023-05-22 08:13:46 博客园

[完结]CUDA与TensorRT部署实战课程(附源码+课件)

![0.png](http://static.itsharecircle.com/231113/d4de447732851a548729c7705f413626.png) 今天给大家分享一套关于CUDA与TensorRT部署的视频教程,附带课件+源码资料下载,希望大家喜欢! 一、什么是TensorRT? TensorRT是英伟达的AI加速推理模型,我们在使用GPU深度学习训练完后,会生成.pt模型,但是这个模型在推理时不够快,这时候就需要转化成trt模型,使用c++利用TensorRT API编写程序进行快速推理。 二、CUDA下载安装 本人下载的版本是cuda11.6,cudnn8.4,正好对应上的,当然cuda版本要能支持你的GPU,cuda版本太高你的GPU跑不了,cuda版本太低也不...阅读全文

博文 2023-11-13 13:03:29 kaidnxhd2023