一個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" 返回主迴圈的程式設計習慣).
相關文章
- actix/actix:Rust語言的Actor框架Rust框架
- 手把手教你寫一個Java的orm框架(4)JavaORM框架
- 手把手教你寫一個Java的orm框架(2)JavaORM框架
- 手把手教你寫一個Java的orm框架(1)JavaORM框架
- 手把手教你寫一個Java的orm框架(3)JavaORM框架
- David Fowler :actor框架為什麼沒能流行起來?框架
- Lite Actor:方舟Actor併發模型的輕量級優化模型優化
- 使用 Java 框架 Scipio ERP 建立一個線上商店Java框架
- 一個clean框架的demo框架
- 一個C#開發編寫Java框架的心路歷程C#Java框架
- 從零開始實現一個簡易的Java MVC框架JavaMVC框架
- Java集合框架(一)-ArrayListJava框架
- 一個Wpf的開發框架框架
- 開發一個自己的 CSS 框架(一)CSS框架
- Java反應式事件溯源之第 2 部分:Actor 模型Java事件模型
- 最熱門的13個Java微服務框架Java微服務框架
- 一個C#開發者用Java搭建Android框架的心路歷程C#JavaAndroid框架
- Java安全框架(一)Spring SecurityJava框架Spring
- 23-Java-Spring框架(一)JavaSpring框架
- 21-Java-Hibernate框架(一)Java框架
- tp框架做的一個部落格框架
- 好程式設計師Java教程分享幾個流行的Java框架程式設計師Java框架
- 實現一個屬於自己的React框架(一)React框架
- 一個很簡單的PHP框架lyuePHP框架
- 一個由於侵入框架引起的故障框架
- InterlliJ IDEA搭建一個完整的ssh框架Idea框架
- 寫一個最簡陋的node框架框架
- 徒手擼一個簡單的RPC框架RPC框架
- 一個基於Android的MVP框架DemoAndroidMVP框架
- API Star:一個 Python 3 的 API 框架APIPython框架
- 一個Android路由框架的誕生之路Android路由框架
- 看圖學 - Swift actorSwift
- 從零開始實現一個簡易的Java MVC框架(八)–製作StarterJavaMVC框架
- 從零開始實現一個簡易的Java MVC框架(七)–實現MVCJavaMVC框架
- 從零開始實現一個簡易的Java MVC框架(三)--實現IOCJavaMVC框架
- 從零開始實現一個簡易的Java MVC框架(四)--實現AOPJavaMVC框架
- 從零開始實現一個簡易的Java MVC框架(七)--實現MVCJavaMVC框架
- 從零開始實現一個簡易的Java MVC框架(八)--製作StarterJavaMVC框架
- 寫了一個 WebSocket 框架Web框架