2016-08-27 ruki
tbox主要有三种流: stream: 最常用的流,一般用于单路阻塞、非阻塞io的处理,接口简单易用 async_stream:异步流,基于asio的流,全程回调处理,可以在单个线程里支持多路流的并发,节省系统资源,提高效率 static_stream:静态流,用于对纯buffer的位流处理,一般用于各种解析器 不管是stream还是async_stream,都可以在其上挂接多路filter,实现流之间数据过滤和变换。目前支持以下几种filter: zip_filter:gzip、zlib的压缩和解压缩过滤器 charset_filter:字符集编码的过滤器 chunked_filter:http chunked编码的解码过滤器 继续阅读 »
2015-05-06 刘太华
一个单线程的epoll server示例 这个示例是一个echo server, 将回显client端send的64字节. 代码在 echoEpollServer 在OSX下 gcc 4.6, linux 下编译可用, 默认被写死了监听8886端口. 继续阅读 »
2017-01-13 Piasy
这一篇可以看做是 Handler 的番外篇。 ThreadLocal 看 Looper 源码的过程中,我们肯定看到过 Looper.myLooper() 的使用,它可以获取与当前线程关联的 Looper 对象,那这个关联是怎么建立起来的?就是通过 ThreadLocal。 继续阅读 »
2017-05-02 YongHao Hu
go
多线程的并发处理: 在有限时间内, 同时并发处理 n 个资源 ``` //from https://talks.golang.org/2012/concurrency.slide#47 c := make(chan Result) go func() { c 继续阅读 »
2016-03-15 demon7452
Java面试题总结(其一) 1、sleep和wait方法的区别 这两个方法来自不同的类分别是Thread和Object 最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。 wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在 任何地方使用 synchronized(x){ x.notify() //或者wait() } sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常 继续阅读 »
2016-11-23 Eric Wang
 环境 Lucene 6.0.0 Java "1.8.0_111" OS Windows 7 Ultimate  线程安全 在Lucene中,打开一个IndexWrite之后,就会自动在索引目录中生成write.lock文件,这个文件中并不会有内容,不管是在索引打开期间还是在索引关闭之后,其大小都为0KB,并且在IndexWriter关闭之后,并不会删除该文件。如果同时打开多个IndexWriter的话,后打开的IndexWriter就会抛出LockObtainFailedException异常。这是个很重要的保护机制,因为若针对同一索引打开两个writer的话,会导致索引损坏。所以Lucene中的锁主要针对并发写的情况,在写 继续阅读 »
2016-04-02 Xie Jingyi
写在前面 本文默认读者对 Python 生成器 有一定的了解,不了解者请移步至生成器 - 廖雪峰的官方网站。 本文基于 Python 3.5.1,文中所有的例子都可在 Github 上获得。 学过 Python 的都知道,Python 里有一个很厉害的概念叫做 生成器(Generators)。一个生成器就像是一个微小的线程,可以随处暂停,也可以随时恢复执行,还可以和代码块外部进行数据交换。恰当使用生成器,可以极大地简化代码逻辑。 也许,你可以熟练地使用生成器完成一些看似不可能的任务,如“无穷斐波那契数列”,并引以为豪,认为所谓的生成器也不过如此——那我可要告诉你:这些都太小儿科了,下面我所要介绍的绝对会让你大开眼界。 生成器 继续阅读 »
2013-02-18 刘太华
FlameGraph的例图,解释如下: 图中每一个方块代表栈里的一个函数。 Y轴代表调用深度,最上面的是当前正在CPU上执行的函数,下面的都是其祖先。每个函数都是由它下方的函数调用的。 X轴不是按照时间先后排列的,它只代表样本数目。方块越宽,代表该函数出现的次数越多。 在有多个并发线程同时被采样,样本总数可能超过采样所用的时间。 继续阅读 »
2016-09-02 Alex Sun
最近由于兴趣开始学习Go语言。对于编译型语言,最早接触的是Java,写了三年多,然而自从接触了异常灵活的脚本后就对它再也喜欢不起来。对于C系语言也一直没感觉。后来偶然看了一些Go相关的资料,也接触了一些基于Go编写的开源项目,觉得挺有意思,就学了一些,总的来说,还是比较喜欢Go的。 相比于Java,Go中没有了诸多繁琐的OO概念,接口的设计也非常简洁和解耦合。语法上,介于静态语言和动态语言之间,对于喜欢脚本的人来说,还是比较容易接受。 然后就是不得不提的goroutine,足够轻量和简单易用,比起其他语言中啰啰嗦嗦的一大堆多线程代码,确实更加让人喜欢。 基于Go,实现了一个HTTP请求模块ok。 学习资料 A Tour o 继续阅读 »
2015-04-08 刘太华
首先, 单个socket是面向玩家的, 以此展开的会有,这个玩家,也就是说这个socket,会拥有一个gameWorld, 以及在玩家login之前, 所有玩家都面向的gameHolder, Holer处理登陆, 已登陆玩家数据网络层将推送给Player类处理。 transfer和gameHoler, gameWorld, Player之间,各使用3个线程安全的数据队列m_DataQueue. m_DataQueue的类型是 FastQueue m_DataQueue; 它的原型是: {} template class FastQueue { struct node { T element; 继续阅读 »