- 博客(15)
- 收藏
- 关注
原创 Netty学习——ChannelHandler、ChannelHandlerPipeline和ChannelHandlerContext
一:关于ChannelHandlerChannelPipeline 提供了ChannelHandler链路的容器,并定义了用于在该链上传播入站和出站事件溜的API。来自《Netty实战》ChannelHandler充当了处理入站 和 出战 数据的应用程序逻辑的容器。例如实现ChannelInBoundHandler接口,可以接收入站事件和数据。二:关于ChannelPipelineChannelPipeline 提供了ChannelHandler链路的容器,并定义了用于在该链上传播入
2020-06-02 17:28:10 216
原创 Netty学习——实现简单的聊天室
一:定义服务端定义服务端的启动代码public static void main(String[] args) throws InterruptedException { //链接监听组 EventLoopGroup boosLoop = new NioEventLoopGroup(1); //工作组 EventLoopGroup workerLoop = new NioEventLoopGroup(8); try {
2020-05-11 20:48:42 211
原创 业务日记——延时队列/延时消费
一、基本定义延时/定时消息是指生产者(producer)发送消息到server后,server并不将消息立即发送给消费者(consumer),而是在producer指定的时间之后送达。二、常用的使用场景任务超时处理。例如 订单系统中,如果某个用户在 30分钟内没有支付,则订单自动进行过期处理任务延时处理。例如订餐系统中,下单成功60s之后 给用户发短信通知定时任务。例如现在通过手机...
2020-05-11 19:58:20 1122
原创 Netty学习—概述和核心组件
一 netty概述1.1 为什么有了NIO还有NettyNIO的缺点JDK 的 NIO 底层由 epoll 实现,该实现饱受诟病的Selector 空轮询 bug 会导致 cpu 飙升 100%NIO的API繁杂,使用麻烦,必须熟练掌握Selector、Channel、Buffer等相关API。并且需要熟练Java多线程编程和网络编程,才能写出高质量的NIO代码。开发工作量和难度都...
2020-04-23 17:07:29 163
原创 Netty学习——Reactor线程模型
一 netty概述1.1 为什么有了NIO还有NettyNIO的缺点JDK 的 NIO 底层由 epoll 实现,该实现饱受诟病的Selector 空轮询 bug 会导致 cpu 飙升 100%NIO的API繁杂,使用麻烦,必须熟练掌握Selector、Channel、Buffer等相关API。并且需要熟练Java多线程编程和网络编程,才能写出高质量的NIO代码。开发工作量和难度都...
2020-04-21 20:49:49 246
原创 Netty学习——NIO的零拷贝
NIO的零拷贝零拷贝 指不是不拷贝,而且不是使用CPU拷贝。带来了更少的数据复制,更新的上下文切换,更少的CPU缓存等详细参考 NIO和零拷贝传统I/O拷贝当执行read() 和 write() 操作的时候 如何使用变化的(切换)当执行read操作的时候,会从 用户态(user context) 切换成 内核态(kernel context)(拷贝)然后通过DMA(Dire...
2020-04-21 14:35:08 234
原创 Netty学习——BIO、NIO、AIO的总结
一、简介Java中的BIO、BIO和AIO都可以理解为 Java对操作系统各种IO模型的封装。无需关心操作系统层面的知识,只需要使用Java的API就可以了.首先需要了解一下几个基本概念:同步和异步,阻塞和非阻塞同步和异步同步:同步是致发起一个调用后,被调用折不处理完请求,比返回异步:表示发起一个调用后,会立即收到被调用者的反馈,表示已经接受到信息来,但是并没有返回结果。此时我们可...
2020-02-24 20:04:03 257
原创 Netty学习——Java中的IO
Java中的IO结构一:Java IO中常用的类主要的类如下:File(文件特征与管理):用于文件或者目录的描述信息,例如生成新目录,修改文件名,删除文件,判断文件所在路径等。InputStream(二进制格式操作):抽象类,基于字节的输入操作,是所有输入流的父类。定义了所有输入流都具有的共同特征。OutputStream(二进制格式操作):抽象类。基于字节的输出操作。是所有输出流的父...
2020-02-24 17:39:28 139
原创 《Java并发编程的艺术》——HashMap和ConcurrentHashMap
介绍HashMap在并发执行put操作的时候,会引发死循环,是因为在多线程下会导致HashMap的Entry链表形成环形数据结构。
2020-01-07 20:12:07 100
原创 《Java并发编程的艺术》——什么是锁(一)
一 什么是锁锁,是用来控制多个线程访问共享资源的一种方式,一般来说,一个锁能够防止多个线程同时访问共享资源,(但是有些锁也可以允许多个线程的访问贡献资源,例如读写锁)。在Java 1.5之前 只有靠 synchronized关键字来实现锁功能,但是在Java1.5之后,提供了和synchronized有着同样功能的Lock接口是实现锁。同时具有 锁获取和释放的可操作、可中断以及超时获取锁等...
2020-01-03 19:57:04 191
原创 《Java并发编程的艺术》学习 ——线程间的通信
线程之间的通信1 volatile 和 synchronize 关键字java支持多个线程同时访问一个对象或者对象的成员变量。但是每个线程由都可以拥有这个变量的拷贝对象,也就是缓存。这样做的目的是为了加快程序的执行速度。但是在一个多核处理器中,这个变量在各个线程的缓存中可能不是最新的。因为主内存中的值可能已经被其他线程修改了。volatile(点击查看详情描述)关键字volatile可以...
2019-12-10 20:40:11 107
原创 《Java并发编程的艺术》学习 ——多线程基础
什么是线程操作系统启动一个Java程序,就会创建一个Java进程。而一个进程里面有多个java线程。线程是操作系统中的最大调度单元,也是轻量级进程。每个线程都有自己的程序计数器,堆栈和局部变量的属性,并且都能够访问共享的内存变量。为什么要用多线程更多的处理器核心现在处理器的核心数越来越多,比如各种2核、4核、8核处理器。而程序运行过程中能够创建多个线程,但是一个线程在一个时刻只能运行在一...
2019-11-30 16:30:29 152
原创 《Java并发编程的艺术》学习 ——synchornized
一、synchornized 的实现原理和应用1.1 Java的对象头在上面介绍的线程要访问同步方法、代码块的时候,那首先是要获取到锁。那锁到底是什么有存储在什么地方呢?这个和java对象的组成有关。java对象分成3块区域:对象头储存对象的运行时数据(Mark Word)哈希码、锁的状态、持有的锁、GC分代年纪,对象分代年纪、偏向线程ID、偏向时间戳。Mark Word的结构不...
2019-11-30 13:16:06 209
原创 《Java并发编程的艺术》学习 ——volatile
一、关于Volatile简介1.1、关于volatile的定义Java编程语言允许线程访问的共享变量,为了确保共享变量能够被准确和一致性的更新,线程应该确保通过排他锁单独获取到某个变量。如果一个字段被声明成了volatile,那么他在Java线程的内存模型里面就可以被所有线程看到这边变量的一致性。二、Volatile原理2.1、volatile启动了什么作用呢?被volatile修...
2019-11-30 13:15:05 132
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人