Kotlin에 동시성 키워드가없는 이유는 무엇입니까?


84

동기화 / 동시성에 대한 키워드가없는 이유는 무엇입니까?

지금까지 내 연구는 한 가지 해결책을 제공합니다. 몇 가지 높은 수준의 클래스를 래핑하고이를 사용하여 동시성을 처리합니다.

순수 Kotlin 프로젝트에서 동시성 등을 처리하는 고도로 최적화 된 작은 구성 요소가 필요한 경우 어떻게해야합니까?

내 인상은 Kotlin이 Kotlin에서 코드의 90 %를 작성하지만 Kotlin으로 표현할 수없는 Java 코드를 포함하는 Java 용 지원 언어라는 것입니다.

이게 옳은 거니? 이것이 의도 된 방식입니까?



24
Kotlin에는 동기화 된 블록 ( kotlinlang.org/api/latest/jvm/stdlib/kotlin/synchronized.html ), 동기화 된 메서드 ( kotlinlang.org/api/latest/jvm/stdlib/kotlin.jvm/-synchronized ), 휘발성 필드 ( kotlinlang.org/api/latest/jvm/stdlib/kotlin.jvm/-volatile/… ). 그리고 java.util.concurrent 클래스를 사용할 수 있습니다. 정확히 무엇을 찾고 있습니까?
JB Nizet

1
여기에 하나 이상의 질문이 있습니다. 하나의 주제에 집중해야합니다. 어떤 동시성 항목이 누락되었다고 생각하십니까? 누락되지 않은 것처럼 들리는 것을 지정하십시오. 그렇다면 다른 질문은 실제로 SO 질문이 아니며 의견 기반입니다 (올바른 주장이 아닙니다).
Jayson Minard

1
참조 : github.com/Kotlin/kotlinx.coroutines 업데이트를 코 틀린의 코 루틴에
제이슨 Minard에게

답변:


143

코 루틴이 포함 된 Kotlin 1.1이 출시되었으며 함께 제공됩니다 async..await! 더 그것에 대해 읽기 코 틀린 참조 문서 , Kotlinx 코 루틴 라이브러리 및 깊이에있는이 위대한 예에 의해 Couroutines

Kotlin 코 루틴 외부에는 다음과 같은 옵션이 있습니다.

Java가 가진 모든 것을 갖추고 있습니다. 위의 목록에서 "동기화 및 잠금" 이라는 문구를 충족하면 언어 변경없이 훨씬 더 많이 사용할 수 있습니다. 모든 언어 기능은 조금 더 예쁘게 만듭니다.

따라서 작은 Kotlin 런타임, JDK의 JVM 런타임 및 사용하려는 기타 JVM 라이브러리를 사용하여 100 % Kotlin 코드를 가질 수 있습니다. Java 코드가 필요 없으며 Java (as-in JVM) 라이브러리 만 있으면됩니다.

몇 가지 기능에 대한 간단한 샘플 :

class SomethingSyncd {
    @Synchronized fun syncFoo() {

    }

    val myLock = Any()

    fun foo() {
        synchronized(myLock) {
            // ... code
        }
    }

    @Volatile var thing = mapOf(...)
}

1
어떤 예? cos 방법에 동기화를 작성하면 그것을 받아들이지 않을 것입니다 ... 휘발성과 동일 ...
vach

2
@vach 귀하의 질문에 내 의견에 링크를 제공했습니다. Synchronized 및 Volatile은 주석입니다.
JB Nizet

시도한 코드가있는 경우 @vach 오류 메시지와 함께 질문에 포함되어야합니다.
Jayson Minard

1
@JBNizet 나는 당신의 연결에 합병
제이슨 Minard에게

1
@vach이 질문과 관련된 주석의 빠른 샘플을 추가했습니다 (예 : CountDownLatchJava 샘플 포트만 포함). Kovenant의 경우 lib 문서를 봅니다.
Jayson Minard

3

내 질문에 대한 실제 답변이 kotlin 토론의 깊이 어딘가에 있었기 때문에 내 질문에 답할 것입니다.

자바에서 왔을 때 저를 혼란스럽게 한 것은 동시성 키워드가 언어 키워드가 아니라 주석이었습니다. 나에게는 동기화와 같은 중요한 개념이 주석을 통해 처리된다는 것이 이상해 보였지만 이제는 완벽하게 이해됩니다. Kotlin은 플랫폼에 구애받지 않는 언어가되는 방향으로 가고 있으며, jvm에서만 작동하는 것이 아니라 거의 모든 작업을 수행 할 것입니다. 따라서 동기화 및 휘발성은 jvm에만 국한된 것이기 때문에 예를 들어 자바 스크립트에서는 필요하지 않을 수 있습니다.

간단히 말해서 kotlin은 자바가 가진 모든 것을 가지고 있으며 (패키지 가시성을 제외하고) 훨씬 더 많은 다른 언어가 가지고 있지 않은 큰 차이는 코 루틴입니다. 하지만 kotlin에서 할 수없는 자바로 작성할 수있는 것은 아무것도 없습니다 ... (내가 아는 한)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.