[英]Scala actors, futures and system calls resulting in Thread leaks
我正在運行一個具有不同角色(scala角色)的復雜軟件。 其中一些執行使用scala期貨以避免鎖定並繼續處理收到的新消息(簡化代碼):
def act {
while (true) {
receive {
case (code: String) =>
val codeMatch = future { match_code(code) }
for (c <- codeMatch)
yield callback(code)(JSON.parseJSON(c))
}
}
}
def match_code(code: String) {
val result = s"my_script.sh $code" !!
}
我注意到在jvisualvm
和Eclipse Debugger時,該系統正在運行時,活動線程數一直在增加。 恐怕我遇到某種線程泄漏,但是我無法檢測出問題出在哪里。
這是完成線程和活動線程的一些屏幕截圖(我隱藏了一些與此問題無關的活動線程)
成品螺紋
活動線程
編輯1:在上面的圖形示例中,我僅使用3個不同類的actor運行系統:Actor1將消息發送到Actor2,然后將消息發送給Actor3
您使用的是receive
因此每個actor都將使用其自己的線程,並且至少在此示例中,您沒有提供任何方法終止actor。 因此,您可能希望每個actor都有一個新線程已經啟動。 如果您看到的是那樣,那么一切都按預期工作。 如果要使actor停止運行,則必須讓它們最終退出while
循環,或在它們上調用sys.exit
或類似方法。
(此外,在2.11版中,老式Scala演員被棄用,而Akka演員被棄用。)
您(在上面的代碼中)也沒有任何跡象表明未來是否真正完成。 如果期貨沒有完成,他們將繼續束縛線程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.