iT邦幫忙

2023 iThome 鐵人賽

DAY 18
0
Kotlin

讓 Kotlin 程式碼更道地 - 談 Effective Kotlin 與相關的 Design Pattern系列 第 18

D18: 寫在 JCConf 前 - Coroutines vs Virtual Thread (Project Loom)

  • 分享至 

  • xImage
  •  

這禮拜就是 JCConf 了,看題目認為其中有兩個重點。

  • Kotlin 的議程愈來愈多,已經快變成一軌了
  • Java 21 與 Virtual thread

那小弟我也有講一場關於 Arrow KT : https://pretalx.com/jcconf-2023/talk/M7EBF3/

所以今天想談的就是 Virtual Thread 出來會不會威脅到 Kotlin Coroutines

參考影片

Roman Elizarov 是 JetBrains Kotlin 語言開發的管理者,特別是在 Kotlin 的協程(coroutines)部分有很大的貢獻。本影片就是他在說明 coroutines 與 project loom 的異與同。

Yes

Loom 是否會對 Kotlin 造成威脅

先講結論,是不會.... 但可能會減少很多要從 Java 跳去 Kotlin 的理由。Project Loom 是 Java 21的一個重要特性。旨在簡化非同步開發,主要通過引入輕量級的執行緒,稱為 "fibers"。這使得開發人員可以使用類似於同步程式碼的方式來編寫非同步程式,而不需要 Callback 或其他更複雜的控制流構造,例如Rx...。

是否對 Kotlin 造成威脅:

語言特性和生態系統的不同

Kotlin 的協程和 Project Loom 解決的問題相似,但它們的實現方式和目標略有不同。Kotlin 的協程是語言級別的,且已經有一個成熟的生態系統,包括各種函式庫和工具。而 Project Loom 是 JVM 級別的,可能需要一些時間來建立其生態系統

互補而非取代

對於許多開發者來說,Kotlin 的協程和 Project Loom 可能會互補而非取代。Kotlin 開發者可以從兩者中選擇最適合他們需求的工具。此外,未來 Kotlin 可能會更深入地整合 Project Loom 的功能,反而是增加 coroutines 的效能。

跨平台優勢

Kotlin 不僅限於 JVM,還支持其他平台,例如 JavaScript 和 Native。這意味著 Kotlin 的協程在跨平台環境中有其獨特的優勢。

Coroutines 還有併發性而不只是 light-weight thread

假設您正在開發一個應用,需要從兩個不同的 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 生態系統中共存。

每日一推 (G)I-DLE

HWAA (火花)

Yes


上一篇
D17: Kotlin 重用性 - 使用屬性委託來提取常見的模式
下一篇
D19: 寫在 JCConf 前 - Sealed Interface 與 Domain Model
系列文
讓 Kotlin 程式碼更道地 - 談 Effective Kotlin 與相關的 Design Pattern30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言