2016-12-21 55 views
14

在Java中是否有任何JSR或其他嚴重的主動創建輕量級線程?類似於Golang的goroutines或Erlang進程。Java中的輕量級線程?

Java線程以其重量級而聞名。使用每個線程512-1024 kb之類的東西,所以這限制了線程的最大數量。 Java線程之間的上下文切換也需要很長的時間。

我聽說過Quasar「纖維」(http://docs.paralleluniverse.co/quasar/),它是輕量級的線程實現爲lib。雖然使用起來似乎有些棘手,並沒有引起很多興趣。

理想的輕量級線程應該內置到JVM的核心中。

+1

你會考慮線程被重用的主人模式嗎?也許像Map Reduce或Hazelcast這樣的分佈式版本? – vikingsteve

+0

I' m想到單個web服務器能夠處理100 000個同時發生的客戶端,併爲每個請求保留一個(輕量級)線程,併爲每個客戶端同步調用外部系統 – DagR

+0

不應該允許web服務器處理該問題嗎? case 100 000同時客戶端聽起來像很多,所以你會使用某種形式的集羣反正 – vikingsteve

回答

3

我不知道有任何「輕量級」解決方案將進入Java社區流程。查看jep條目...沒有關於那裏的任何信息。有一個請求coroutines年前;但那件事看起來很「死」。

我認爲最接近的,你可以得到今天會更像什麼akka框架提供給你;因爲那些Akka演員都是用一個「輕量級線程」運行的,可以這麼說。

+1

在Java的開始,我們有「綠色線程」,這是一個純粹的JVM線程實現,但後來被內核線程所取代 – DagR

+0

的確,我隱約記得當時看到那些東西有很多麻煩。但我猜*這些綠色線程不是「輕量級」的;-) ......但考慮到你的其他評論,我認爲阿卡對你來說可能是一個好的開始。 – GhostCat

+1

下面是關於綠色線程和本地線程的深入探討:http://softwareengineering.stackexchange.com/questions/120384/why-not-green-threads – DagR