概述
对协程的技术已经觊觎很久,他有高性能的优点,但目前工具对他支持的不是很好,调试繁琐。苦于运维和调试比较困难,一直望而却步。恰逢十一,决心攻下这块碉堡。这边文章只是个引子,后续会做更详细的描述,不断完善。贴出实践的经验。
Java里成熟一点的框架属kilim,这个发音让我想起了俄罗斯的克林姆林宫。
顺便欣赏下美景吧。
确实豪华!
进程,线程,协程。简单理解如下。
进程:操作系统级别的,独占的资源比较多。是操作系统层面的并发。
线程:在一个进程中,共享进程的资源且线程之间又可以独立。是应用程序层面的并发。
协程:在一个线程中,共享线程的资源,避免了上下文切换,是用户级别的并发。
模型
Task,一个协程,重写execute方法。
Mailbox,协程之间的消息传递。他有3个重要的方法:
get()/set():阻塞协程,不阻塞线程。
getb()/setb():阻塞线程。
getnb()/setnb():不阻塞协程,也不阻塞线程。
环境搭建
难点在于支持持续集成,因为他需要织入class字节码。官方给的demo是用ant来写的。所以笔者结合经验,想到了maven的一个支持ant的插件maven-antrun-plugin,指定build.xml即可。执行ant插件,肯定要在编译之后,才可以织入class,因此有个语法很关键
<execution>
<phase>compile</phase>
<configuration>
<tasks>
<ant antfile="build.xml" target="weave" />
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
其中phase节点的意思是,在compile之后执行。而在build里面,只写了weave一个target,其他的是用于独立运行ant使用,并非给maven-antrun-plugin插件使用。关于kilim的jar包,我们需要自行安装到私服中,或者本地仓库。每次调试的时候,都需要在eclipse显示的执行mvn package才可以,所以从架构角度来讲,因为做成一个独立的jar包,就会方便调试。
其他
参考猫头哥另外一篇文章:http://phl.iteye.com/blog/1522366,kilim源码安装到仓库,支持javadoc和java-source需要配置插件和源码目录<sourceDirectory>src</sourceDirectory>,kilim源码不是个标准的maven工程。
官方例子中,有些指令写的不对,kilim必须要用jdk7
切换到源码目录,命令行处理方式如下
D:\project\eclipse3.6\kilim-1.0>
javac -cp kilim.jar -d D:\project\eclipse3.6\kilim-1.0\classes D:\project\eclipse3.6\kilim-1.0\examples\kilim\examples\SimpleTask.java
java -cp kilim.jar;libs\asm-all-4.1.jar;$CLASSPATH -d D:\project\eclipse3.6\kilim-1.0\classes kilim.tools.Weaver D:\project\eclipse3.6\kilim-1.0\classes\kilim\examples\SimpleTask.class
java -cp kilim.jar;D:\project\eclipse3.6\kilim-1.0\classes;$CLASSPATH kilim.examples.SimpleTask
参考资料
http://www.ibm.com/developerworks/cn/java/j-javadev2-7.html
http://segmentfault.com/a/1190000000697487
http://yueyemaitian.iteye.com/blog/1745690