Google PlusFacebookTwitter

献丑

By on Jul 28, 2017 in 技术文章, 补充两句 | 0 comments

https://github.com/IUSR/jvm-serializers/ 一直很倚重的一个序列化、反序列化性能测试报告。发现已经1年多没有更新了,这期间很多库、框架的版本都升级了,索性自己fork来试试。主要是升级版本以及改用maven管理依赖——这个不用白不用啊,不明白为什么要自己签入一堆jar文件,又占地方又不能diff什么的,图个什么啊。 由于涉及到的库、框架实在太多,又没有时间把对应的性能测试代码改到和最新版本兼容,所以一些库是没有升级到目前的最新版。 而且上手一试,发现很多库的发行管理确实乱得不行,不去maven中心服务器发布的只好从官网下载回来——这也是这个项目一直以来的做法但是我比较讨厌这样带着一堆jar包签入项目代码,flat-buffers找来找去竟然要自己编译打包,而且发行版本的源代码里的pom.xml还带着“-SNAPSHOT”。好在大部分的库实际上我是不太在意的……我的目标是colfer,protobuf、protostuff和msgpack,其他那些JSON、XML沙文主义的就靠边站吧,好在本来它们性能也就那样😅 PS,默认关闭的一些框架的测试我也是干脆没有管,像dsl-platform、colfer的编译什么的。...

Lion经验两则

By on Nov 2, 2011 in 技术文章 | 0 comments

最近经历的Lion下比较想记一笔的经验,凑个数吧。 无厘头的DNS无法解析问题。 不知道为什么我总是碰见这个问题… 网上搜了搜似乎也不是很常见。 症状很简单:DNS无法解析,重设DNS服务器地址、DHCP的话重新续租等等都没法解决。 解决方法:重启mDNSResponder服务。 似乎有些简单粗暴了,不过确实没找到其他方法。记得Lion之前,这个mDNSResponder服务就总给我找事儿,不过那时的症状很明显,一般是从休眠唤醒之后,mDNSResponder进程的CPU使用率异常高,占满一个CPU核心;升级到Lion之后就再也没遇到这个问题,当时还觉得这个升级的钱花的值得。结果,后来就时不时地遇见DNS无法解析的问题了,无论怎么修改DNS相关设置都没法解决,syslog、dmesg输出也没有任何异常信息。后来想起来mDNSResponder最近很是消停,就上网搜了搜,才知道原来这个服务不像名字暗示的那样只负责mDNS,而是负责所有解析了。也许咱家接触Mac太晚了,不知道这个服务的渊源,我只记得Ubuntu下关掉Avahi是不影响其他DNS解析的。 于是老方法重启了mDNSResponder服务,问题解决。 launchctl stop com.apple.mDNSResponder launchctl start com.apple.mDNSResponder 果然咬人的狗不叫。 把用户追加到其他组。 各种userxxx命令在Lion下都是没有地,只有万能的dscl。简短截说,一个例子: dscl localhost -append /Local/Default/Groups/wheel GroupMembership iusr 其实刚开始也就是知道dscl这么个东西而已,不过好在有-list命令可以去遍历“/”下的各个节点,然后就比较简单了。需要注意的也就是不同版本的Mac OS X的本地目录(此目录非彼目录哇~)下的用户组的路径不太相同,本地目录作为数据源的名称也不同,这些不同之处基本上不带参数跑一下dscl也就看出来了,就不废话了。...

安装gevent,Lion上

By on Oct 17, 2011 in 咿咿呀呀, 技术文章 | 0 comments

不出所料,凡是带本地绑定的Python库,在Mac上多多少少都别扭一些。 今天是pip install gevent的时候出错: In file included from gevent/core.c:225: gevent/libevent.h:9:19: error: event.h: No such file or directory gevent/libevent.h:38:20: error: evhttp.h: No such file or directory gevent/libevent.h:39:19: error: evdns.h: No such file or directory …… gevent/core.c: At top level: gevent/core.c:21272: error: expected ‘)’ before ‘val’ lipo: can’t figure out the architecture type of: /var/tmp//cceaLjtd.out error: Setup script exited with error: command ‘gcc-4.2’ failed with exit status 1 没仔细看pip怎么传-I、-L的参数去,环境变量也烦得慌,反正直接python setup.py可以接受这两个参数就好了。 直接下载gevent的源代码包,然后 sudo python setup.py install -I /usr/local/include/ -L /usr/local/lib 即可。因为/usr/local 是给brew指定的默认PREFIX,libevent也是通过brew安装来的。...

Biased Locking && Bulk Rebiasing

By on Jun 1, 2011 in 他山之石, 技术文章 | 0 comments

也是老东西了…以前没有整理记录的习惯,哎。 Early research utilized property that mostsynchronization in Java language is uncontended. not only uncontended,but unshared Most objects locked / unlocked by exactly one thread inthe object’s lifetime Avoid creation of mutex/condvar per Java object. ——不是完全免费的 Compare-and-swap / compare and exchange “Inflate” to full heavyweight monitor if contention detected Previous: First thread locking the object reserves the lock with an atomic operation Subsequent locks / unlocks by that thread use no atomic operations Recursion count in object header detects IllegalMonitorStateException Using non-atomic stores If another thread locks the object, relativelyexpensive unreservation required Involves sending signal to reservation owner thread Ensures reservation owner thread not performing concurrent non-atomic stores New Store-Free Biased Locking Bulk rebiasing and bulk...

有关并发

By on May 30, 2011 in 技术文章 | 4 comments

最近那个靠谱的小朋友开始看OpenJDK 6的源代码,相比之下真是让我汗颜,我机器里的代码都扔在那儿很久了。 不知道这个小朋友是不是也从main()开始看,还是为了搞明白一些问题而有针对性地去看。反正最近跟我讨论了一些并发、多线程方面的事情,很多概念和算法都是上学时就学了的,但是不出意料我也已经都忘了。于是,呃,现在看来最方便的查资料方式莫过于wikipedia.org了,也不知道会不会出些纰漏,不过英文版比中文版要好很多,内容多,引用和批注看起来也比较充实,暂且相信这么多人的劳动成果吧。摘录一些基本概念: Critical Section: 临界区。本质上是段代码,其中包含一定需要确保同时只能被一个执行这段代码的线程访问的资源。临界区本身来说并不是实现对资源互斥访问的算法或者机制,一般都需要借用互斥量、信号量之类的结构来确保这种多个线程对这个资源的互斥访问。 Mutex: mutual exclusion,互斥量,互斥体,互斥锁,whatever,基本带上“互斥”就行,也很常见。最简单的用来确保临街区并发安全的算法或者机制,同时也是用来指代负责在多个线程中协调互斥操作的那个数据结构,我想后面这个用途应该更常见,一般说进入了某个mutex保护的临界区以内为 “持有/获得了某个mutex” 。 Mutex有硬件和软件的实现。硬件实现方面,单处理器机器上一般就是临时禁掉中断和上下文切换,多处理器机上一般用原子的test-and-set操作让几个线程通过一个共享的标志变量做busy-wait,也叫做“自旋锁”(spinlock);软件实现就太多了:Dekker算法,Peterson算法,还有发明Paxos的大神Lamport的面包店算法,以及最近才知道的一个Szymanski算法。这几个算法应该都是lock-free的 (???)。 Semaphore:...

解决一个JCC编译构建问题

By on May 1, 2011 in 技术文章 | 2 comments

首先是环境: iusr-mbp:~ iusr$ uname -a Darwin iusr-mbp 10.7.0 Darwin Kernel Version 10.7.0: Sat Jan 29 15:17:16 PST 2011; root:xnu-1504.9.37~1/RELEASE_I386 i386 iusr-mbp:~ iusr$ python -V Python 2.7 JCC是最新的pylucene-3.1.0-1里面的那份儿。 起因是想做个小东西,预计要用到Lucene。别看我不怎么用它,可我还真嫌java干起来太麻烦…虽然做这个也想为了方便工作时用,可也算业余时间折腾吧,实在懒得一本正经地Java。所以选择了PyLucene,自然,以前也没接触过。 按照http://lucene.apache.org/pylucene/jcc/documentation/install.html上的说明,看起来不难,可惜,果不其然,到了我这里就出问题了,诶。 出问题时的输出: iusr-mbp:jcc iusr$ python setup.py build running build running build_py writing /private/tmp/pylucene-3.1.0-1/jcc/jcc/config.py copying jcc/config.py -> build/lib.macosx-10.5-fat3-2.7/jcc copying jcc/classes/org/apache/jcc/PythonVM.class -> build/lib.macosx-10.5-fat3-2.7/jcc/classes/org/apache/jcc copying jcc/classes/org/apache/jcc/PythonException.class -> build/lib.macosx-10.5-fat3-2.7/jcc/classes/org/apache/jcc running build_ext building...