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

深入浅出 Go trace

本篇文章简要介绍了go语言执行跟踪程序(Trace),从功能和性能上阐述了它的优势。前言你有没有考虑过,你的goroutines是如何被go的runtime系统调度的?是否尝试理解过为什么在程序中增加了并发,但并没有给它带来更好的性能?go执行跟踪程序可以帮助回答这些疑问,还有其他和其有关性能的问题,例如延迟、竞争和较低的并行效率。该工具是Go 1.5版本加入的,通过度量go语言特定事件的运行时,例如:创建,启动和终止goroutines阻塞/非阻塞goroutines(syscalls, channels, locks)网络 I/OSyscalls垃圾回收以上事件的所有数据会被跟踪器收集,而且不会做任何类型的聚合和抽样。这在一些复杂的应用程序中,通过 go tool trace 命令对其进...阅读全文

博文 2019-08-30 07:29:04 IT程序猿

深入理解Golang Channel

Golang使用Groutine和channels实现了CSP(Communicating Sequential Processes)模型,channles在goroutine的通信和同步中承担着重要的角色。在GopherCon 2017中,Golang专家Kavya深入介绍了 Go Channels 的内部机制,以及运行时调度器和内存管理系统是如何支持Channel的,本文根据Kavya的ppt学习和分析一下go channels的原理,希望能够对以后正确高效使用golang的并发带来一些启发。以一个简单的channel应用开始,使用goroutine和channel实现一个任务队列,并行处理多个任务。func main(){ //带缓冲的channel ch := make(chan T...阅读全文

吃透Netty源码系列四十九之WebSocket编解码器详解二_王伟王胖胖的博客

吃透Netty源码系列四十九之WebSocket编解码器详解二 Utf8FrameValidatorWebSocketServerProtocolHandlerdecodeWebSocketProtocolHandler的decode WebSocket08FrameEncoder解码器 Utf8FrameValidator 今天把剩下的一些说下,这个是验证文本帧是否是UTF8编码的。来看下吧。其实他就是检查是否是最后一帧,如果是文本帧的话就检测内容,不是UTF8的就抛异常。如果是持续帧,只有第一帧是文本的才会开始检测,所以后续来的肯定是文本帧,就不用判断是不是文本帧了,只要判断是不是在检测就好了。 @Override public void channelRead(ChannelHandl...阅读全文

博文 2021-09-16 12:32:25 CSDN博客

理解 Go make 和 new 的区别

new 和 make 都可以用来分配空间,初始化类型,但是它们确有不同。 new(T) 返回的是 T 的指针new(T) 为一个 T 类型新值分配空间并将此空间初始化为 T 的零值,返回的是新值的地址,也就是 T 类型的指针 *T,该指针指向 T 的新分配的零值。 123456789p1 := new(int)fmt.Printf("p1 --> %#v \n ", p1) //(*int)(0xc42000e250) fmt.Printf("p1 point to --> %#v \n ", *p1) //0var p2 *inti := 0p2 = &ifmt.Printf("p2 --> %#v \n ", p2) //(*int)(0xc42000e278) fmt.Printf("...阅读全文

博文 2019-05-15 11:18:54 三月沙

Netty之ChannelPipeline理解二

Netty之ChannelPipeline理解二 ChannelPipeline不是单独存在,它肯定会和Channel、ChannelHandler、ChannelHandlerContext关联在一起,所以有关概念这里一起讲。 参考:https://www.cnblogs.com/qdhxhz/p/10234908.html ChannelPipeline不是单独存在,它肯定会和Channel、ChannelHandler、ChannelHandlerContext关联在一起,所以有关概念这里一起讲。 ChannelHandler 概念 handler.png ChannelHandler下主要是两个子接口 ChannelInboundHandler(入站): 处理输入数据和Channel...阅读全文

博文 2021-08-27 06:22:43 简书

聊聊 TCP 长连接和心跳那些事 | 徐靖峰

前言可能很多 Java 程序员对 TCP 的理解只有一个三次握手,四次握手的认识,我觉得这样的原因主要在于 TCP 协议本身稍微有点抽象(相比较于应用层的 HTTP 协议);其次,非框架开发者不太需要接触到 TCP 的一些细节。其实我个人对 TCP 的很多细节也并没有完全理解,这篇文章主要针对微信交流群里有人提出的长连接,心跳问题,做一个统一的整理。 在 Java 中,使用 TCP 通信,大概率会涉及到 Socket、Netty,本文将借用它们的一些 API 和设置参数来辅助介绍。 长连接与短连接TCP 本身并没有长短连接的区别 ,长短与否,完全取决于我们怎么用它。 短连接:每次通信时,创建 Socket;一次通信结束,调用 socket.close()。这就是一般意义上的短连接,短连接的好...阅读全文

博文 2019-12-23 03:56:40 个人博客

Netty学习(五)—IdleStateHandler心跳机制_tuzhenyu的博客

Netty学习(五)—IdleStateHandler心跳机制 Netty的IdleStateHandler心跳机制主要是用来检测远端是否存活,如果不存活或活跃则对空闲Socket连接进行处理避免资源的浪费; 个人主页:tuzhenyu’s page 原文地址:Netty学习(五)—IdleStateHandler心跳机制 (0)基础 心跳机制 心跳是在TCP长连接中,客户端和服务端定时向对方发送数据包通知对方自己还在线,保证连接的有效性的一种机制在服务器和客户端之间一定时间内没有数据交互时, 即处于 idle 状态时, 客户端或服务器会发送一个特殊的数据包给对方, 当接收方收到这个数据报文后, 也立即发送一个特殊的数据报文, 回应发送方, 此即一个 PING-PONG 交互. 自然地, ...阅读全文

博文 2021-09-02 12:30:44 CSDN博客_idlestatehandler

【Netty】(8)---理解ChannelPipeline - 雨点的名字

ChannelPipeline ChannelPipeline不是单独存在,它肯定会和Channel、ChannelHandler、ChannelHandlerContext关联在一起,所以有关概念这里一起讲。 一、ChannelHandler 1、概念 先看图 ChannelHandler下主要是两个子接口 ChannelInboundHandler(入站): 处理输入数据和Channel状态类型改变。 适配器: ChannelInboundHandlerAdapter(适配器设计模式) 常用的: SimpleChannelInboundHandler ChannelOutboundHandler(出站): 处理输出数据 适配器: ChannelOutboundHandlerAdapter...阅读全文

博文 2021-09-02 12:29:43 博客园

netty笔记(1)--ctx.write()和channel().write()的区别

写博客 CSDN 中国开发者社区CSDN (Chinese Software Developer Network) 创立于1999年,致力为中国开发者提供知识传播、在线学习、职业发展等全生命周期服务。 教程 文章 帮助 视频 讨论 华为云入门 华为云资源专属DeC 华为云计算架构设计 华为云DevCloud实战 华为云专家_开发者中心-华为云 华为云强化实战营 WeLink免密登录华为云 单点登录华为云 钉钉免密登录华为云 华为云ModelArts送你降温神器—鬼故事生成器 华为云_CS_入门视频 华为云平台之大模型上传 前端小白历险记(二)原来是你腾讯搞的鬼! 最新文章 为你推荐 Netty 系列笔记之开篇 netty 入门 Netty源码分析 (八)----- write过程 源码分析 ...阅读全文

博文 2021-09-02 12:29:08 华为云

netty中Pipeline的ChannelHandler执行顺序案例详解 - 田志良

一、netty的Pipeline模型 netty的Pipeline模型用的是责任链设计模式,当boss线程监控到绑定端口上有accept事件,此时会为该socket连接实例化Pipeline,并将InboundHandler和OutboundHandler按序加载到Pipeline中,然后将该socket连接(也就是Channel对象)挂载到selector上。一个selector对应一个线程,该线程会轮询所有挂载在他身上的socket连接有没有read或write事件,然后通过线程池去执行Pipeline的业务流。selector如何查询哪些socket连接有read或write事件,主要取决于调用操作系统的哪种IO多路复用内核,如果是select(注意,此处的select是指操作系统内核...阅读全文

博文 2021-09-02 12:28:20 博客园

Netty之ByteBuf零拷贝

Netty之ByteBuf零拷贝我们先来看下Zero-copy的定义: "Zero-copy" describes computer operations in which the CPU does not perform the task of copying data from one memory area to another. This is frequently used to save CPU cycles and memory bandwidth when transmitting a file over a network. 所谓的 Zero-copy, 就是在操作数据时, 不需要将数据 buffer 从一个内存区域拷贝到另一个内存区域. 少了一次内存的拷贝, 减少了cpu...阅读全文

博文 2021-08-28 11:10:37 简书

Java NIO中,关于DirectBuffer,HeapBuffer的疑问?

1. DirectBuffer 属于堆外存,那应该还是属于用户内存,而不是内核内存?来自 ByteBuffer (Java Platform SE 8 )The contents of direct buffers may reside outside of the normal garbage-collected heap所以是否真的是堆外存并不是强制的,是依赖jvm实现的。回归正题:用户内存还是内核内存?首先,我们知道,每个进程是有独立的地址空间的,也就是说对于一个java进程来说,他只能看到自己的内存,他只能读写自己的内存。而内核其实是有上帝视角的,如早期的linux,内核是能看到并读写所有物理内存的(关于这一点,有兴趣的可以参看我的简写版linux的实现:https://github...阅读全文

博文 2021-08-28 11:12:10 知乎

Netty 权威指南笔记(二):Java NIO 和 Netty 对比_albon arith

Netty 权威指南笔记二Java NIO 和 Netty 对比 Java NIO 开发Netty 开发 示例程序 Netty 权威指南笔记(二):Java NIO 和 Netty 对比 Netty 是业界流行的 NIO 框架之一,它的健壮性、功能、性能、可定制性和可扩展性在同类框架中都说首屈一指的,也已经得到了成百上千商用项目的验证。Netty 框架都有什么优点呢? API 使用简单,开发门槛低。功能强大,预置多种编解码功能,支持多种主流协议。定制能力强,可以通过 ChannelHandler 对通信框架灵活扩展。性能高。成熟稳定,社区活跃,已经修复了 Java NIO 所有的 Bug。经历了大规模商业应用的考验,质量有保证。 Java NIO 开发 我们看一看在 笔记(一)里面的 Jav...阅读全文

博文 2021-08-27 08:12:00 CSDN博客

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

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

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

借用Arthas分析maven非包版本冲突导致找不到类问题

背景: 微服务应用xxx.jar依赖netty-all-4.1.25Final,项目中使用通信工具async-http-client-2.0.31内置耦合了io.netty的几个同包名同类名的类;Tomcat应用运行时报:java.lang.NoSuchMethodError: io.netty.channel.DefaultChannelId.newInstance()Lio/netty/channel/DefaultChannelId;。But netty-all包中是存在DefaultChannelId类的,显然发生冲突了(该类加载的地方并非来自于netty-all-4.1.25Final.jar==>后面分析类来源)微服务应用必须使用高版本的netty,固只能考虑升级http-cli...阅读全文

博文 2023-09-13 16:34:22 CSDN博客

Java IO学习笔记三:MMAP与RandomAccessFile - Grey Zeng

作者:Grey 原文地址:Java IO学习笔记三:MMAP与RandomAccessFile 关于RandomAccessFile 相较于前面提到的BufferedReader/Writer和FileReader/Writer 普通的Reader和Writer只能顺序读写数据,RandomAccessFile提供了一个独有的seek方法,可以修改文件内容的指针,从而可以方便读取和修改文件中的任意位置。示例: import java.io.RandomAccessFile; import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel; import static java.nio.charset.Standar...阅读全文

博文 2023-05-12 16:32:23 博客园

java使用nio读写文件_使用nio读取文件_小码农叔叔的博客

IO原理 最近在研究 JAVA NIO 的相关知识,学习NIO,就不能提到IO的原理和事项,必经NIO是基于IO进化而来 IO涉及到的底层的概念大致如下: 缓冲区操作。2) 内核空间与用户空间。3) 虚拟内存。4) 分页技术 一,虚拟存储器 虚拟存储器是硬件异常(缺页异常)、硬件地址翻译、主存、磁盘文件和内核软件的完美交互,它为每个进程提供了一个大的、一致的和私有的地址空间。 虚拟存储器的三大能力: ①将主存看成是一个存储在磁盘上的地址空间的高速缓存。 ②为每个进程提供了一个一致的地址空间。 ③保护每个进程的地址空间不被其他进程破坏。 虚拟内存的两大好处: ① 一个以上的虚拟地址可指向同一个物理内存地址。 ② 虚拟内存空间可大于实际可用的硬件内存。 二,用户空间与内核空间 设虚拟地址为32位...阅读全文

博文 2023-05-15 10:50:14 CSDN博客

日志收集组件—Flume、Logstash、Filebeat对比-腾讯云开发者社区

概述数据的价值在于把数据变成行动。这里一个非常重要的过程是数据分析。提到数据分析,大部分人首先想到的都是Hadoop、流计算、机器学习等数据加工的方式。从整个过程来看,数据分析其实包含了4个过程:采集,存储,计算,展示。大数据的数据采集工作是大数据技术中非常重要、基础的部分,具体场景使用合适的采集工具,可以大大提高效率和可靠性,并降低资源成本。Flume、Logstash和Filebeat都是可以作为日志采集的工具,本报告将针对这三者进行分析。一、FlumeFlume是一种分布式、高可靠和高可用的服务,用于高效地收集、聚合和移动大量日志数据。它有一个简单而灵活的基于流数据流的体系结构。它具有可调的可靠性机制、故障转移和恢复机制,具有强大的容错能力。它使用一个简单的可扩展数据模型,允许在线分析...阅读全文

博文 2024-04-03 17:45:12 腾讯云