<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[海浪儿]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/iteye_11714</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; iteye_11714]]></copyright><item><title><![CDATA[支持连接池的netty client核心功能实现剖析]]></title><link>https://blog.youkuaiyun.com/iteye_11714/article/details/82613709</link><guid>https://blog.youkuaiyun.com/iteye_11714/article/details/82613709</guid><author>iteye_11714</author><pubDate>Wed, 28 Jan 2015 17:15:58 +0800</pubDate><description><![CDATA[
支持连接池的netty client核心功能实现剖析
 
本文为原创，转载请注明出处 
源码地址：
 https://github.com/zhangxianwu/light-netty-client
 
1、连接池
    由于TCP连接的建立和关闭分别会经历三次握手和四次挥手，而三次握手和四次挥手都是系统开销很大的操作。如果每次一个新的请求发起时，都为其新建一个连接，在请求处...]]></description><category></category></item><item><title><![CDATA[SFTP信任公钥配置及JSCH库]]></title><link>https://blog.youkuaiyun.com/iteye_11714/article/details/82599693</link><guid>https://blog.youkuaiyun.com/iteye_11714/article/details/82599693</guid><author>iteye_11714</author><pubDate>Tue, 08 Jul 2014 16:36:46 +0800</pubDate><description><![CDATA[
1、SFTP信用公钥配置

1.1 客户端生成密钥对
以DSA举例： 
ssh-keygen –t dsa
执行该命令后，在home/用户名/.ssh目录下，会生成id_dsa和id_dsa.pub两个文件

1.2 将id_dsa.pub公钥文件上传至服务端的home/用户名/.ssh目录下

scp id_dsa.pub 用户名@服务端IP:/home/用户名/.ssh
此时...]]></description><category></category></item><item><title><![CDATA[MCS锁]]></title><link>https://blog.youkuaiyun.com/iteye_11714/article/details/82579216</link><guid>https://blog.youkuaiyun.com/iteye_11714/article/details/82579216</guid><author>iteye_11714</author><pubDate>Sat, 10 May 2014 15:27:15 +0800</pubDate><description><![CDATA[
1、 为什么要引入MCS锁？
         在NUMA架构体系下，访问remote memory的速度要远远慢于访问local memory的速度。如下图所示（引自Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy &amp;amp; Nir Shavit）：
 在前一篇文章中分析了CLH算...]]></description><category></category></item><item><title><![CDATA[CLH锁]]></title><link>https://blog.youkuaiyun.com/iteye_11714/article/details/82579156</link><guid>https://blog.youkuaiyun.com/iteye_11714/article/details/82579156</guid><author>iteye_11714</author><pubDate>Fri, 09 May 2014 16:07:50 +0800</pubDate><description><![CDATA[
本文为原创，转载请注明出处
1、为什么要引入CLH锁
       在前一篇文章中，介绍了TAS、TTAS两种自旋锁。这两种锁的缺点是：任何一个处理器每一次对锁成功的访问（getAndSet(true)和set(false)任意一个方法的调用），都会将其他处理器的cache中的缓存失效掉。这样会导致以下后果：

其他处理器无法再采用局部自旋的方式对相同数据进行访问，后续的其他处理器对锁的...]]></description><category></category></item><item><title><![CDATA[自旋锁和缓存一致性]]></title><link>https://blog.youkuaiyun.com/iteye_11714/article/details/82577867</link><guid>https://blog.youkuaiyun.com/iteye_11714/article/details/82577867</guid><author>iteye_11714</author><pubDate>Sat, 26 Apr 2014 10:15:23 +0800</pubDate><description><![CDATA[
本文为原创，转载请注明出处
1、两种自旋锁的实现：TAS和TTAS
1.1 TAS
class TasLock {
        AtomicBoolean state = new AtomicBoolean(false);

        void lock() {
            while (state.getAndSet(true)) {
         ...]]></description><category></category></item><item><title><![CDATA[并发浅析]]></title><link>https://blog.youkuaiyun.com/iteye_11714/article/details/82577864</link><guid>https://blog.youkuaiyun.com/iteye_11714/article/details/82577864</guid><author>iteye_11714</author><pubDate>Sat, 26 Apr 2014 09:48:00 +0800</pubDate><description><![CDATA[之前做的项目里涉及到了一些并发问题，今天总结一下
并发是由对共享资源的访问不当引起的，总的来说，常见的共享资源分为两大类：一种是数据库表中的行记录；一种是代码中的共享变量（譬如单例或者静态类型等等）。下面对这两类共享资源引发的并发问题借助一些实际的例子进行阐述。1.数据库表中的行记录共享
此类资源共享导致并发问题的原因一般分为以下三类：
 没有加锁
 加锁的时机不对
 加锁的顺序不...]]></description><category></category></item><item><title><![CDATA[自旋锁和缓存一致性]]></title><link>https://blog.youkuaiyun.com/iteye_11714/article/details/82577829</link><guid>https://blog.youkuaiyun.com/iteye_11714/article/details/82577829</guid><author>iteye_11714</author><pubDate>Fri, 25 Apr 2014 20:59:00 +0800</pubDate><description><![CDATA[1、两种自旋锁的实现：TAS和TTAS
1.1 TAS

class TasLock {
        AtomicBoolean state = new AtomicBoolean(false);

        void lock() {
            while (state.getAndSet(true)) {
            }
        }

     ...]]></description><category></category></item><item><title><![CDATA[ExecutorCompletionService分析及使用]]></title><link>https://blog.youkuaiyun.com/iteye_11714/article/details/82564717</link><guid>https://blog.youkuaiyun.com/iteye_11714/article/details/82564717</guid><author>iteye_11714</author><pubDate>Sun, 29 Dec 2013 16:54:34 +0800</pubDate><description><![CDATA[
ExecutorCompletionService分析及使用
 
当我们通过Executor提交一组并发执行的任务，并且希望在每一个任务完成后能立即得到结果，有两种方式可以采取：
 
方式一：
通过一个list来保存一组future，然后在循环中轮训这组future,直到每个future都已完成。如果我们不希望出现因为排在前面的任务阻塞导致后面先完成的任务的结果没有及时获取的情况，那...]]></description><category></category></item><item><title><![CDATA[闭锁/栅栏/信号量/FutureTask分析及使用]]></title><link>https://blog.youkuaiyun.com/iteye_11714/article/details/82554103</link><guid>https://blog.youkuaiyun.com/iteye_11714/article/details/82554103</guid><author>iteye_11714</author><pubDate>Wed, 18 Dec 2013 20:06:17 +0800</pubDate><description><![CDATA[
闭锁/栅栏/信号量/FutureTask分析及使用
 
1、闭锁
 
用途：可用于命令一组线程在同一个时刻开始执行某个任务，或者等待一组相关的操作结束。尤其适合计算并发执行某个任务的耗时。
 
public class CountDownLatchTest {

	public void timeTasks(int nThreads, final Runnable task) ...]]></description><category></category></item><item><title><![CDATA[基于echo例子的netty4通信总结]]></title><link>https://blog.youkuaiyun.com/iteye_11714/article/details/82548291</link><guid>https://blog.youkuaiyun.com/iteye_11714/article/details/82548291</guid><author>iteye_11714</author><pubDate>Fri, 08 Nov 2013 17:48:51 +0800</pubDate><description><![CDATA[
本文为原创，转载请注明出处
基于echo例子的netty4通信总结
 
在netty4源码分析系列文章中分别详细介绍了echo例子中涉及到网络通讯的每一个环节，本文对echo例子中服务端和客户端依次发生的步骤做个总结：
 
服务端依次发生的步骤

建立服务端监听套接字ServerSocketChannel，以及对应的管道pipeline；
启动boss线程，将ServerSock...]]></description><category></category></item><item><title><![CDATA[Netty4源码分析- read]]></title><link>https://blog.youkuaiyun.com/iteye_11714/article/details/82548150</link><guid>https://blog.youkuaiyun.com/iteye_11714/article/details/82548150</guid><author>iteye_11714</author><pubDate>Thu, 07 Nov 2013 19:06:46 +0800</pubDate><description><![CDATA[
本文为原创，转载请注明出处
Netty4源码分析- read
 
 当selector检测到OP_READ事件时，触发read操作：
//NioEventLoop
if ((readyOps &amp;amp; (SelectionKey.OP_READ | SelectionKey.OP_ACCEPT)) != 0 || readyOps == 0) {
                ...]]></description><category></category></item><item><title><![CDATA[Netty4源码分析-flush]]></title><link>https://blog.youkuaiyun.com/iteye_11714/article/details/82547863</link><guid>https://blog.youkuaiyun.com/iteye_11714/article/details/82547863</guid><author>iteye_11714</author><pubDate>Wed, 06 Nov 2013 10:40:16 +0800</pubDate><description><![CDATA[本文为原创，转载请注明出处                                                           

                                                        Netty4源码分析-flush Netty的写操作由两个步骤组成：

Write:将msg存储到ChannelOutboundBuff...]]></description><category></category></item><item><title><![CDATA[netty 4源码分析-write]]></title><link>https://blog.youkuaiyun.com/iteye_11714/article/details/82547696</link><guid>https://blog.youkuaiyun.com/iteye_11714/article/details/82547696</guid><author>iteye_11714</author><pubDate>Tue, 05 Nov 2013 11:00:19 +0800</pubDate><description><![CDATA[
 本文为原创，转载请注明出处
netty 4源码分析-write
 
Netty的写操作由两个步骤组成：

Write:将msg存储到ChannelOutboundBuffer中
Flush：将msg从ChannelOutboundBuffer中flush到套接字的发送缓冲区中。

       本文介绍第一个步骤write
//DefaultChannelHandlerCont...]]></description><category></category></item><item><title><![CDATA[netty4源码分析-accept]]></title><link>https://blog.youkuaiyun.com/iteye_11714/article/details/82539876</link><guid>https://blog.youkuaiyun.com/iteye_11714/article/details/82539876</guid><author>iteye_11714</author><pubDate>Fri, 13 Sep 2013 10:56:17 +0800</pubDate><description><![CDATA[
本文为原创，转载请注明出处
netty4源码分析-accept
 
        本文分析服务端如何accept客户端的connect请求，首先看下selector的I/O多路复用的分发逻辑：
//NioEventLoop
private static void processSelectedKey(SelectionKey k, AbstractNioChannel ch) {...]]></description><category></category></item><item><title><![CDATA[netty4源码分析-connect]]></title><link>https://blog.youkuaiyun.com/iteye_11714/article/details/82538749</link><guid>https://blog.youkuaiyun.com/iteye_11714/article/details/82538749</guid><author>iteye_11714</author><pubDate>Fri, 06 Sep 2013 15:06:25 +0800</pubDate><description><![CDATA[
本文为原创，转载请注明出处
netty4源码分析-connect
 
 
客户端向服务端发起connect请求由以下代码触发：
ChannelFuture f = b.connect(host, port).sync();
 调用Bootstrap的connect方法：
//Bootstrap
public ChannelFuture connect(String inetHo...]]></description><category></category></item><item><title><![CDATA[开放平台体系结构及网关分析]]></title><link>https://blog.youkuaiyun.com/iteye_11714/article/details/82538318</link><guid>https://blog.youkuaiyun.com/iteye_11714/article/details/82538318</guid><author>iteye_11714</author><pubDate>Wed, 04 Sep 2013 14:23:55 +0800</pubDate><description><![CDATA[
本文为原创，转载请注明出处
开放平台体系结构及网关分析
 
    开放平台以API的方式将公司的核心基础服务（譬如支付、交易等）开放给ISV（Independent Software Vendors，独立软件开发商），而这些功能由公司的各业务平台（为ISV提供API底层服务的提供部门）在开放平台的基础上，按一定的规范将其内部的数据或业务流程以API的形式提供给ISV。ISV基于这些基础...]]></description><category></category></item><item><title><![CDATA[JAVA/PHP/C#版RSA验签]]></title><link>https://blog.youkuaiyun.com/iteye_11714/article/details/82536419</link><guid>https://blog.youkuaiyun.com/iteye_11714/article/details/82536419</guid><author>iteye_11714</author><pubDate>Fri, 23 Aug 2013 14:34:57 +0800</pubDate><description><![CDATA[
本文为原创，转载请注明出处
JAVA/PHP/C#版RSA验签
 
本文是上一篇文章的兄弟篇，上篇文章介绍了客户端的sdk中如何基于JAVA/PHP/C#使用RSA私钥签名，然后服务端基于JAVA使用RSA公钥验签，客户端签名/服务端验签的模式只能帮助服务端检查客户端来的请求数据是否被篡改，同样的，客户端也需要对服务端的返回结果检查是否被篡改，因此就引出了本片文章。
 
      ...]]></description><category></category></item><item><title><![CDATA[Netty4源码分析-NioEventLoop实现的线程运行逻辑]]></title><link>https://blog.youkuaiyun.com/iteye_11714/article/details/82536054</link><guid>https://blog.youkuaiyun.com/iteye_11714/article/details/82536054</guid><author>iteye_11714</author><pubDate>Wed, 21 Aug 2013 16:42:42 +0800</pubDate><description><![CDATA[
Netty4源码分析-NioEventLoop实现的线程运行逻辑
 
在netty服务端启动源码分析-线程创建一文中已分析SingleThreadEventExecutor所持有的线程的运行逻辑由NioEventLoop实现，那么本文就着手分析NioEventLoop实现的线程运行逻辑：
 
// NioEventLoop
protected void run() {
      ...]]></description><category></category></item><item><title><![CDATA[netty4服务端启动源码分析-线程的创建]]></title><link>https://blog.youkuaiyun.com/iteye_11714/article/details/82525621</link><guid>https://blog.youkuaiyun.com/iteye_11714/article/details/82525621</guid><author>iteye_11714</author><pubDate>Thu, 15 Aug 2013 16:14:08 +0800</pubDate><description><![CDATA[
本文为原创，转载请注明出处
netty4服务端启动源码分析-线程的创建
 
本文分析Netty中boss和worker的线程的创建过程：
以下代码是服务端的启动代码，线程的创建就发生在其中。
EventLoopGroup bossGroup = new NioEventLoopGroup();
 
NioEventLoopGroup的类关系图如下：
 构造方法执行过程如下：
...]]></description><category></category></item><item><title><![CDATA[netty4源码分析-bind]]></title><link>https://blog.youkuaiyun.com/iteye_11714/article/details/82525247</link><guid>https://blog.youkuaiyun.com/iteye_11714/article/details/82525247</guid><author>iteye_11714</author><pubDate>Tue, 13 Aug 2013 19:15:03 +0800</pubDate><description><![CDATA[
本文为原创，转载请注明出处
netty4源码分析-bind 
在前一篇文章中分析了监听套接字ServerSocketChannel的创建过程，本文接着分析绑定IP和端口的过程。
 回到之前未分析完的doBind逻辑，前一篇文章已分析到dobind方法中initAndRegister方法，该方法最终触发了对regPromise 的listener的回调，Listener将bind任务加到b...]]></description><category></category></item></channel></rss>