伪异步IO
摘要:针对传统的BIO编程,当客户端数量一直增加的情况下,可能会导致服务器直接奔溃掉,进而出现了一种伪异步IO的线程方式。 先看一下代码: 看一下server端的代码: 其中使用了自定义的一个线程池HandlerExecutorPool,下面看一下这个线程池的实现 代码很简单,是一个有界队列的自定义线程池
阅读全文
posted @
2017-03-28 13:52
小~虎
阅读(175)
推荐(0)
网络编程Socket知识点回复
摘要:Socket又称“套接字”,应用程序通常通过“套接字”向网络发出请求或者应答网络请求。 Socket和ServerSocket类库位置java.net包中,ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,
阅读全文
posted @
2017-03-27 17:14
小~虎
阅读(184)
推荐(0)
无锁并行框架多生产者多消费者模型
摘要:下面看一下多生产多消费者的模式,下面的代码是模拟100个生产者,每个生产者生产100个事件,然后有3个消费者,同时进行消费,共消费1W个事件, 下面看一下代码: 这边new出了3个消费者,并把消费者数组放入workPool这个消息队列中,然后在RingBuffer中获取事件,进行消费: 看一下eve
阅读全文
posted @
2017-03-13 17:06
小~虎
阅读(423)
推荐(0)
无锁并行框架构建复杂消费模型
摘要:复杂场景下使用RingBuffer(P1生产的数据给C1、C2并行执行,最后C1、C2执行结束后C3执行) 这是一种菱形操作 顺序执行操作,这个操作比较简单,(P1生产的数据给C1,C1执行完成后,给C2) 六边形执行操作,这个操作比较复杂,(P1生产的数据给C1A,C2A,这两个执行完成后,分别丢
阅读全文
posted @
2017-03-09 19:53
小~虎
阅读(210)
推荐(0)
Disruptor框架EventProcessor和Workpool的使用
摘要:场景使用: 在HelloWorld的实例中,我们创建Disruptor实例,然后调用getRingBuffer方法去获取RingBuffer,其实在很多时候,我们可以直接使用RingBuffer,以及其他的API操作,看一下示例: 使用EventProcessor消息处理器; 使用WorkerPoo
阅读全文
posted @
2017-03-09 19:14
小~虎
阅读(762)
推荐(0)
Disruptor底层实现讲解与RingBuffer数据结构讲解
摘要:Disruptor术语 RingBuffer:被看作Disruptor最主要的组件,然而从2.0开始RingBuffer仅仅负责存储和更新在Disruptor中流通的数据。对一些特殊的使用场景能够被用户(使用其他数据结构)完全替代。 Sequence:Disruptor使用Sequence来表示一个
阅读全文
posted @
2017-03-07 20:05
小~虎
阅读(680)
推荐(0)
Disruptor并发框架简介
摘要:Martin Fowler在自己网站上写一篇LMAX架构的文章,在文章中他介绍了LMAX是一种新型零售金额交易平台,它能够以很低的延迟产生大量交易。这个系统是建立在JVM平台上,其核心是一个业务逻辑处理器,它能够在一个线程里每秒处理6百万订单。业务逻辑处理器完全是运行在内存中,使用事件源驱动方式。业
阅读全文
posted @
2017-03-07 16:54
小~虎
阅读(382)
推荐(0)
并发编程中的读写锁分离锁的使用
摘要:ReentrantReadWriteLock(读写锁) 读写锁ReentrrantWriteLock, 其核心就是实现读写分离的锁,在高并发访问下,尤其是读多写少的情况下,性能要远高于重入锁。 之前学synchronized、ReentrantLock时,我们知道,同一时间内,只能有一个线程进行访问
阅读全文
posted @
2017-03-03 14:29
小~虎
阅读(451)
推荐(0)
并发编程过程中的重入锁
摘要:ReentrantLock(重入锁) 重入锁:在需要进行同步的代码部分加上锁定,但不要忘记最后一定要释放锁定,不然会造成锁永远无法释放,其他线程永远进不来的结果。 然后我们看一下打印的结果: 只有在第一个方法结束后,才会去执行第二个方法。 这种用法跟synchronized的用法差不多,还记得我们在
阅读全文
posted @
2017-03-03 10:29
小~虎
阅读(146)
推荐(0)