自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 收藏
  • 关注

转载 Netty 线程模型与基础应用(一)

Reactor模式 Reactor 是反应堆的意思,Reactor 模型是指通过一个或多个输入同时传递给处理器。服务端将它们同步分派给请求对应的处理线程,Reactor 模式也叫 Dispatcher 模式。Netty 整体是整体采用了主从Reactor模型 Reactor角色 Reactor模型中有三种角色,分别是 Acceptor:处理客户端新连接,并分派请求到处理器链中 Reactor:负责监听和分配事件,将I/O事件分派给对应的Handler。 Handler:事件处理,如编码、解码等 Reac

2020-08-07 18:04:19 122

翻译 NIO实战演练3(Tomcat源码IO模型线程分析)

前面设计的Http服务通过异步处理业务,提高了IO线程的效率。但IO线程始终只有一个无法发挥现代服务器多核CPU并行处理能力。像Tomcat、Jobss 等生产级的Http 服务容器 ,会构造多个IO线程同时运行,每个IO线程中都独占一个Selector(选择器)。另外接收连接与IO读写也会分开,用专门线程处理OP_ACCEPT事件,工作内容包括:接收连接、验证连接安全性、检测连接是否超出限定值、将超出的数量添加至等待对列。 连接线程:调用accept()获得一个新管道,然后注册至 IO线程当中的选择器。请

2020-08-06 13:36:58 147

转载 NIO实战演练2(设计一个Http服务并实现)

前面设计的心跳服务端所有读写包括业务处理都是在一个线程中同步完成的。因为心跳业务操作没有几乎没有任何阻塞延时操作,以单个线程足够了。如果中间的业务处理是一个非常耗时操作如:查询数据库。 这将导致所有请求都被会阻塞。所以会将耗时会采用异步线程池来完成。接下来一起设计一个Http服务并实现。 一、Http协议处理流程 http协议是一个超文本协议(rpc是二进制的协议),并且是一个半双工协议,只能由客户端主动发,服务端被动响应。其整个处理流程如下图: 流程说明: 客户端发起请求,并根据协议封装请求头与请求参数

2020-08-05 21:25:50 211

原创 bean的生命周期

1.bean典型的生命周期 实例化 —> 填充属性 -> 调用BeanNameAware的setBeanName()方法 ->调用BeanFactoryAware的setBeanFactory()方法 ->调用ApplicationContextAware的setApplicationContect()方法->调用BeanPostProcessor的预初始化方法->调用InitializingBean的afterPropertiesSet()方法->调用自定义的初

2020-08-04 17:43:48 103

转载 JDBC中的执行器

JDBC中的执行器 jdbc有三种执行器分别是Statement,PreparedStatement,CallableStatement(简单执行器,预先执行器,存储过程执行器) 声明:基本功能:执行静态SQL PreparedStatement:设置预编译,防止SQL注入 CallableStatement:设置出参,读取参数(用于执行存储过程) Mybatis执行过程: 主要的执行模块是:SqlSession-> Executor-> StatementHandler->数据库 Sql

2020-08-04 17:41:35 410

转载 Nio实战演练1(心跳服务)

实现长连接心跳服务 在类似RPC(远程过程调用)场景中为了保证传输的效率,通常情况下会采用长链接,而长链接的保持即通过定时心跳实现。类似场景在消息推送服务中也是非常常见。所以心跳服务是网络编程中的基础且普遍的应用。 Dubbo和zookpper都有心跳饱和机制 心跳服务需求说明 由客户端定时发送给服务端,服务端作出响应。因为一直要发送,所以发送的消息和返回的消息的体量必须足够小,只要能标识心跳事件即可。具体消息格式设计要根据所使用的应用协议而定。 心跳服务设计 在客户端我们采用SocketChannel来

2020-08-04 16:12:06 257

转载 Selector选择器工作模型(二)

selector的键集说明 在选择器中总共维护了三个键集,底层都是Set实现所以不会重复: 全部键集(keys):所有向该选择器注册的键都放置于此 选择键集(selectedKeys):存放准备就续的键 取消键集(cancelledKeys) :存放已取消的键 通过刷新或关闭选择器都会导致,键集发生变更。 下图详细说明了键 调用select()会刷新键,将已就绪集添加至选择集中,以及selectKey中、清空取消键集并移除已取消键 移除选择集,选择集不会被选择器自动移除,需自行调用Set.remove(

2020-08-04 14:01:24 134

转载 Selector选择器工作模型(一)。

一,Selector选择器工作模型。 之前用管道(chennal)实现了一个阻塞式模型。那个模型中。服务端建立连接后里面就会分配一个线程等待消息的到达。由于 不知道什么时候消息能到达客户端,所以一直阻塞等待。是否可以等消息到达再分配线程处理?这就要说道selector的作用了。只要将管道设置为非阻塞模式。如何注册至selector。当消息到达就会得到通知。 左边的管道没有注册至Selector,需要阻塞等待消息,右边已注册至Selector当消息 到达时才分配线程。避免了线程阻塞。 Selecto

2020-08-03 21:00:49 616

转载 快速上手NIO

一,了解Nio先从io开始说起。 传统的IO指 Input(输入流)、OutPut(输出流) 以支持JAVA应用对外传输交换数据。传输入目标可以是文件、网络、内存等。随着技术的发展对传输效率的要求越来越高,java也逐步演变出了三代IO模型分别是 BIO、NIO、AIO(对windowns提升比较大)。 BIO 同步阻塞式 (Blocking I/O) 在java1.4之前 这种传输的实现 只能通过inputStream和OutputStream 实现。这是一种阻塞式IO模型,应对连接数不多的...

2020-08-01 17:20:04 99

转载 Java中的static关键字解析

—,static的用途。  在《Java编程思想》有这样一段话:“static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。这段话虽然只是说明了static方法的特殊之处,但是可以看出static关键字的基本作用,简而言之就是方便在没有对象的情况下来调用方法或者变量。因为 static修饰过的变量或者方法不需要依赖与对象进行访问只要类被加载了就可以直接通过

2020-07-31 21:23:12 384

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除