一個Java的Actor框架:kilim
除了Akka以外,另外一個將類似Erlang和Scala的Actor的併發模型引入Java的開源框架:kilim/kilim - GitHub,其使用了一種mailbox跨執行緒共享記憶體,沒有鎖或同步。
訊息消費者程式碼如下,監聽mailbox:
訊息發生者,向mailbox傳送訊息:
需要使用Ant呼叫 Kilim's weaver(byte code enhancer):
<target name="weave" depends="compile" description="handles Kilim byte code weaving">
<java classname="kilim.tools.Weaver" fork="yes">
<classpath refid="classpath">
<arg value="-d">
<arg value="./target/classes">
<arg line="./target/classes">
</arg></arg></arg></classpath></java>
</target>
客戶端測試程式碼:
在"events vs. threads"爭論提及兩個問題:執行緒是重量的;其次執行緒正規化隱式的和共享記憶體鎖聯絡在一起,導致效能陷阱;而Kilim 試圖證明執行緒也可以和狀態機一樣輕量,甚至提供一個自動的執行緒stack管理特性(也就沒有必要的 "return to the mainloop" 返回主迴圈的程式設計習慣).
訊息消費者程式碼如下,監聽mailbox:
public class Calculator extends Task{ private Mailbox<calculation> mailbox; public Calculator(Mailbox<calculation> mailbox) { super(); this.mailbox = mailbox; } @[author]Override[/author] public void execute() throws Pausable, Exception { while (true) { Calculation calc = mailbox.get(); // blocks if (calc.getAnswer() == null) { calc.setAnswer(calc.getDividend().divide(calc.getDivisor(), 8, RoundingMode.HALF_UP)); System.out.println("Calculator determined answer"); mailbox.putnb(calc); } Task.sleep(1000); } } } <p class="indent"> |
訊息發生者,向mailbox傳送訊息:
public class DeferredDivision extends Task { private Mailbox<calculation> mailbox; public DeferredDivision(Mailbox<calculation> mailbox) { super(); this.mailbox = mailbox; } @[author]Override[/author] public void execute() throws Pausable, Exception { Random numberGenerator = new Random(new Date().getTime()); MathContext context = new MathContext(8); while (true) { System.out.println("I need to know the answer of something"); mailbox.putnb(new Calculation( new BigDecimal(numberGenerator.nextDouble(), context), new BigDecimal(numberGenerator.nextDouble(), context))); Task.sleep(1000); Calculation answer = mailbox.getnb(); // no block if (answer != null && answer.getAnswer() != null) { System.out.println("Answer is: " + answer.printAnswer()); } } } } <p class="indent"> |
需要使用Ant呼叫 Kilim's weaver(byte code enhancer):
<target name="weave" depends="compile" description="handles Kilim byte code weaving">
<java classname="kilim.tools.Weaver" fork="yes">
<classpath refid="classpath">
<arg value="-d">
<arg value="./target/classes">
<arg line="./target/classes">
</arg></arg></arg></classpath></java>
</target>
客戶端測試程式碼:
Mailbox<calculation> sharedMailbox = new Mailbox<calculation>(); Task deferred = new DeferredDivision(sharedMailbox); Task calculator = new Calculator(sharedMailbox); deffered.start(); calculator.start(); <p class="indent"> |
在"events vs. threads"爭論提及兩個問題:執行緒是重量的;其次執行緒正規化隱式的和共享記憶體鎖聯絡在一起,導致效能陷阱;而Kilim 試圖證明執行緒也可以和狀態機一樣輕量,甚至提供一個自動的執行緒stack管理特性(也就沒有必要的 "return to the mainloop" 返回主迴圈的程式設計習慣).
相關文章
- 【JAVA新生】kilim版的協程Java
- 一個用於實現並行執行的 Java actor 庫並行Java
- actix/actix:Rust語言的Actor框架Rust框架
- 四種Actor框架比較框架
- 用asio擼了一個簡單的Actor模型模型
- ActorLite:一個輕量級Actor模型實現(中)模型
- Java GUI之建立一個只有兩個按鈕的框架JavaGUI框架
- 繼CQRS-DDD-Actor 於一身的新一代框架Domain 編碼完成框架AI
- Spark 是一個基於Java的微Web框架SparkJavaWeb框架
- 分享自己做的一個JAVA RPC 框架 longioJavaRPC框架
- 手把手教你寫一個Java的orm框架(4)JavaORM框架
- 手把手教你寫一個Java的orm框架(3)JavaORM框架
- 手把手教你寫一個Java的orm框架(2)JavaORM框架
- 手把手教你寫一個Java的orm框架(1)JavaORM框架
- 8 個最好的 Java RESTful 框架JavaREST框架
- 一種適合C# Actor的訊息執行方式(中):C# Actor的尷尬C#
- 一個clean框架的demo框架
- 自己的一個小框架框架
- PHP在一個框架中使用另一個框架PHP框架
- 使用 Java 框架 Scipio ERP 建立一個線上商店Java框架
- 一個C#開發編寫Java框架的心路歷程C#Java框架
- 從零開始實現一個簡易的Java MVC框架JavaMVC框架
- Lite Actor:方舟Actor併發模型的輕量級優化模型優化
- David Fowler :actor框架為什麼沒能流行起來?框架
- Java集合框架(一)-ArrayListJava框架
- 一個Wpf的開發框架框架
- 一個C#開發者用Java搭建Android框架的心路歷程C#JavaAndroid框架
- 開發一個自己的 CSS 框架(一)CSS框架
- Java併發的四種風味:Thread、Executor、ForkJoin和ActorJavathread
- Akka系列(一):Akka簡介與Actor模型模型
- java的一個類!Java
- C++併發程式設計框架Theron(1)——Actor模型介紹C++程式設計框架模型
- 最熱門的13個Java微服務框架Java微服務框架
- 9個基於Java的搜尋引擎框架Java框架
- 寫一個小框架框架
- tp框架做的一個部落格框架
- 20個值得一試的JavaScript框架JavaScript框架
- Java集合(1)一 集合框架Java框架