Kotlin에 동시성 키워드가 없는 이유는 무엇입니까?
동기 및 동시성을 나타내는 키워드가 없는 이유는 무엇입니까?
지금까지 제가 조사한 바로는 상위 수준의 수업들을 정리해서 동시성 처리에 사용하는 하나의 해결책이 있습니다.
순수 Kotlin의 프로젝트에서 스레드 세이프 방식으로 동시성을 처리하는 고도로 최적화된 소형 컴포넌트가 필요한 경우 어떻게 해야 합니까?
제 인상은 Kotlin이 Kotlin으로 코드의 90%를 쓰는 Java 보조 언어이지만 Kotlin으로 표현할 수 없는 Java 코드가 있다는 것입니다.
이게 맞나이게 원래 의도된 건가요?
Kotlin 1.1 with Coroutines가 출시되어 함께 제공되었습니다.async..await
자세한 내용은 Kotlin 레퍼런스 문서, Kotlinx Coroutines 라이브러리 및 Couroutines 상세 내용을 참조하십시오.
Kotlin Coroutines 이외에는 다음과 같은 옵션이 있습니다.
- Kovenant 도서관은 Kotlin에게 약속을 추가한다.
- Quasar 라이브러리는 가벼운 스레드와 연속성을 제공합니다.
@Synchronized
자바에서 동일한 키워드에 직접 매핑되는 주석 및 주석synchronized
Kotlin에서 인라인 함수에서 오는 블록synchronized()
.- Kotlin은 새로운 기능을 가진 패키지와 확장 기능을 가지고 있으며 JDK 클래스에 대한 확장 기능도 가지고 있습니다.
- 다음과 같은 패키지에 포함된 모든 항목에 액세스할 수 있습니다.
ConcurrentHashMap
,CountdownLatch
,CyclicBarrier
,Semaphore
, ... - 패키지의 모든 것에 액세스 할 수 있습니다.Kotlin은 쿨 확장 기능 및 유사한/
write
확장 기능을 포함한 몇 가지 확장 기능을 가지고 있습니다.ReentrantReadWriteLock
. - 다음과 같은 패키지에 포함된 모든 항목에 액세스할 수 있습니다.
AtomicReference
,AtomicLong
, ... - 오브젝트에서 및 을 사용할 수 있습니다.
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(...)
}
제 질문에 대한 실제 대답은 코틀린 토론의 어딘가에 있었기 때문에 제 자신의 질문에 대답하겠습니다.
자바에서 왔을 때 혼란스러웠던 점은 동시성 키워드가 언어 키워드가 아니라 주석이라는 것이었습니다.동기화 등의 중요한 개념이 주석을 통해 처리되는 것이 이상하다고 생각했지만, 지금은 완벽하게 이해가 됩니다.Kotlin은 플랫폼에 구애받지 않는 언어를 지향하고 있으며 JVM뿐만 아니라 거의 모든 것을 지원합니다.동기화 및 휘발성은 JVM에 매우 고유하며, 예를 들어 javascript에는 필요하지 않을 수 있습니다.
한마디로 Kotlin은 Java가 가진 모든 것(패키지 가시성 제외)을 갖추고 있으며, 다른 어떤 언어에도 없는 큰 차이는 코루틴이다.하지만 자바어로 쓸 수 있는 게 Kotlin으로 할 수 없는 게 없어...(제가 알기로는)
언급URL : https://stackoverflow.com/questions/35520583/why-are-there-no-concurrency-keywords-in-kotlin
'source' 카테고리의 다른 글
jQuery를 사용하여 URL에서 쿼리 문자열 가져오기 (0) | 2022.09.16 |
---|---|
노드 객체와 요소 객체의 차이점 (0) | 2022.09.16 |
명령줄에서 Eclipse Java 프로젝트 빌드 (0) | 2022.09.16 |
구분 기호로 점이 있는 문자열 분할 (0) | 2022.09.16 |
MySQL - 선택 시 행 번호 가져오기 (0) | 2022.09.15 |