最近在用golang写一个server。压力测试过程发现反应比较慢,但是由于中间的操作都是串行的,无法知道在哪个操作消耗了比较多时间。一开始想到的是打log。但是单个请求又是很快的,于是想到如下方案在调用每个函数的时候,统计该函数的时耗,然后利用channel把同一个函数调用发送到同一个地方,利用m...
分类:
其他好文 时间:
2014-09-13 23:58:36
阅读次数:
534
Netty3 源码分析 - ChannelFuture
ChannelFuture抽象的是Channel中异步IO操作的结果。在Netty中,所有的IO操作是异步的,意味着任何IO调用会立刻返回,而不是等到操作真正的执行完成。相反,会返回一个ChannelFuture 对象,在IO完成之后通过其得到结果状态。ChannelFuture 要么完成要么未完成,当IO操作开始执行会创建一个新的...
分类:
Web程序 时间:
2014-09-13 21:33:05
阅读次数:
447
环境: OS: CentOS 6.5 X64 DB: oracle 10.2.0.5故障:之前由于错误激活备库主写导致主备日志同步,重建备库1.关闭备库,删除数据文件及控制文件,redo文件rm -rf *.log rm -rf *.ctl rm -rf *.dbf2.主库备库channel OR....
分类:
其他好文 时间:
2014-09-13 19:56:45
阅读次数:
398
前面关注的地方都是Netty采用的流水线处理方式的组织方式,ChannelHandler如何管理,通道状态,通道事件等这些上层的架构设计,那么Netty中如何实现诸如套接字绑定,连接,关闭等这些底层的操作呢?不能只顾着套用API写程序,却对细节不求甚解。这里大致追踪下OIO模式下Channel中套接字绑定的实现,(NIO以后分析)其实逻辑都是一样的,只是在线程模型的地方时不同的。
大致过程如下(...
分类:
Web程序 时间:
2014-09-12 17:10:13
阅读次数:
175
记录许总演讲PPT指出的实践:channel– 本质上是一个 MessageQueue– 非常正统的执行体间通讯设施? sync.Mutex/RWMutex/Cond/etc– 不要把 channel 当做万金油,该 Mutex 还是要? 误区– 用 channel 来做互斥 ( 正常应该让 Mut...
分类:
其他好文 时间:
2014-09-12 16:39:53
阅读次数:
181
ChannelPipeline的作用就是组织一系列的ChannelHandlers 为某一个Channel服务,处理各种事件。实现了拦截过滤器模式的高级形式(an advanced form of the Intercepting
Filter pattern),进而有效控制如何处理一个事件以及ChannelHandlers之间如何交互。类型结构图为:
流水线的创建:对于...
分类:
Web程序 时间:
2014-09-12 12:00:13
阅读次数:
310
Bootstrap是通道初始化辅助类 提供了初始化通道或子通道所需要的数据结构,那么ClientBootstrap就是客户端的,而且会执行连接操作。
配置通道,就是把相应的键值对选项传递给底层:
ClientBootstrap b = ...;
// Options for a new channel
b.setOption("remoteAddress", new Inet...
分类:
Web程序 时间:
2014-09-11 19:22:12
阅读次数:
297
Netty3 源码分析 - ChannelState
枚举类ChannelState代表的是这个Channel的状态集,状态的解读和ChannelStateEvent中的value值以及事件的方向息息相关,下面这个表可以从宏观上把握。
Direction
State
Value
Meaning
Upst...
分类:
Web程序 时间:
2014-09-10 17:54:40
阅读次数:
246
Netty3 源码分析 - ChannelEvent
ChannelEvent是和这个Channel相关的IO事件和请求,会由各个ChannelHandler来处理。
事件分为上行和下行两种。当服务器从客户端收到一个消息,那么与之相关的就是一个上行事件(upstream event),流水线中的UpstreamChannelHandler会处理它;如果服务要回应这个...
分类:
Web程序 时间:
2014-09-10 15:49:20
阅读次数:
332
Netty3 源码分析 - ChannelHandlerContext
ChannelHandlerContext存在的意义是可以让其管理的Handler与Pipeline或其他handlers进行交互,ChannelHandler的理解在前面说过。
发送事件:可以调用 sendUpstream(ChannelEvent)
或sendDownstream(Channel...
分类:
Web程序 时间:
2014-09-10 12:35:11
阅读次数:
282