這禮拜就是 JCConf 了,看題目認為其中有兩個重點。
那小弟我也有講一場關於 Arrow KT : https://pretalx.com/jcconf-2023/talk/M7EBF3/
所以今天想談的就是 Virtual Thread 出來會不會威脅到 Kotlin Coroutines
Roman Elizarov 是 JetBrains Kotlin 語言開發的管理者,特別是在 Kotlin 的協程(coroutines)部分有很大的貢獻。本影片就是他在說明 coroutines 與 project loom 的異與同。
先講結論,是不會.... 但可能會減少很多要從 Java 跳去 Kotlin 的理由。Project Loom 是 Java 21的一個重要特性。旨在簡化非同步開發,主要通過引入輕量級的執行緒,稱為 "fibers"。這使得開發人員可以使用類似於同步程式碼的方式來編寫非同步程式,而不需要 Callback 或其他更複雜的控制流構造,例如Rx...。
Kotlin 的協程和 Project Loom 解決的問題相似,但它們的實現方式和目標略有不同。Kotlin 的協程是語言級別的,且已經有一個成熟的生態系統,包括各種函式庫和工具。而 Project Loom 是 JVM 級別的,可能需要一些時間來建立其生態系統
對於許多開發者來說,Kotlin 的協程和 Project Loom 可能會互補而非取代。Kotlin 開發者可以從兩者中選擇最適合他們需求的工具。此外,未來 Kotlin 可能會更深入地整合 Project Loom 的功能,反而是增加 coroutines 的效能。
Kotlin 不僅限於 JVM,還支持其他平台,例如 JavaScript 和 Native。這意味著 Kotlin 的協程在跨平台環境中有其獨特的優勢。
假設您正在開發一個應用,需要從兩個不同的 API 同時獲取用戶的個人資料和他們的貼文,用 Coroutines 就可以優雅的作到併發的行為
import kotlinx.coroutines.*
import kotlinx.coroutines.sync.*
data class UserProfile(val id: Int, val name: String)
data class UserPost(val userId: Int, val content: String)
suspend fun fetchUserProfile(userId: Int): UserProfile {
delay(1000) // 模擬網路延遲
return UserProfile(userId, "John Doe")
}
suspend fun fetchUserPosts(userId: Int): List<UserPost> {
delay(1500) // 模擬網路延遲
return listOf(UserPost(userId, "My first post"), UserPost(userId, "Another post"))
}
fun main() = runBlocking {
val userId = 123
val deferredProfile = async { fetchUserProfile(userId) }
val deferredPosts = async { fetchUserPosts(userId) }
val userProfile = deferredProfile.await()
val userPosts = deferredPosts.await()
println("User Profile: $userProfile")
println("User Posts: $userPosts")
}
總之,雖然 Project Loom 和 Kotlin 的協程在某些方面可能有所重疊,但它們各有優勢,並且很可能會在 Java 和 Kotlin 生態系統中共存。
HWAA (火花)