java 虚拟机上的轻型线程和actor (非akka)——————quasar/Pulsar
已经适用emacs
在介绍quasar/Pulsar之前请让我说点题外话,我觉得这是研究他的原因,也是对当前jvm上脚本语言自己了解的概述。
已经使用emacs live学习和开发clojure 一段时间,当初犹豫过到底要研究clojure还是scala,自己有java的几年开发经验,这样的打算很正常,但是具体专注那个是好久没有下定决心。我在公司和另外一个同事研究过twitter的zipkin,那个是用scala写的,看其源码痛苦不堪,本来对scala就不了解还要翻译成java版本,但是奇迹的是最后我们翻译成功了,但是性能觉对没有zipkin好的,只能勉强翻译出来。后来我还用php写了一个zipkin的客户端 https://github.com/malakaw/zipkin_php_scribe 。扯远了,后来我还是选择了clojure, 有《黑客和画家》对我的影响,(此处不想写太多具体是clojure好还是scala的话,这个,,,争论的人太多了,我就不多说了);不过我的体会是,现在 spark / storm / zipkin...等等, 都是clojure或是scala写的,为啥不能用java直接写,我觉得就像许多年前 有人问用c 语言写,为啥不用汇编一样,没啥意思,软件世界的进化ing;storm的作者自己说的clojure写舒服,java会很痛苦。
在决定专注clojure 一段时间后,突然意识到分布式并发并不是clojure擅长的,scala这个有先天优势,毕竟有akka, 强大的actor。后来在stack overflow上看到有人讨论这个,哎,不得不感叹老外的知识面就是比我们国内广,他们说clojure并发方式很多,很优雅;分布式的并发也有,就是quasar/Pulsar。
quasar/quasar都有actor / 轻型线程 / channel
Lightweight threads, Go-like channels, and Erlang-like actors for Clojure
Pulsar https://github.com/puniverse/pulsar clojure版本
quasar https://github.com/puniverse/quasar java 版本
这里先概述下 quasar
1) fiber 轻型线程
2)channels 类似go 语言的channels
3)actor
东西太多了先简单介绍fiber ;
Fibers 是轻量级的thread, 不是操作系统来管理,一个空闲的fiber只占用400 bytes of RAM,你可以创建数百万fiber在一个应用程序(这个太不可思议了)。如果你了解go语言,那么他就和goroutines差不多。
import co.paralleluniverse.fibers.Fiber;
import co.paralleluniverse.fibers.SuspendExecution;
public class FiberDemo1 {
public static void t1(String ss)
{
new Fiber<String>() {
private static final long serialVersionUID = 1L;
@Override
protected String run() throws SuspendExecution, InterruptedException {
System.out.println(" in fiber...");
return "---";
}
}.start();
}
public static void main(String[] args) {
t1("in ?");
}
}
-javaagent:path-to-quasar-jar.jar
更多推荐
所有评论(0)