Ktor 및 Kotlin/로컬

Ktor 및 Kotlin/로컬


Kotlin/Native의 협동 루트 이야기는 이미 한동안 복잡해졌다. the Kotlin/Native memory model will be changing의 소식에 따라 Kotlin/Native의 협동 루트는 한동안 여전히 복잡한 이야기였다.
Ktor는 협동 프로그램을 중심으로 구축되었다.협동 라우팅 상황은 Ktor의 기능에 근본적으로 영향을 미친다.이 이야기에는 여러 개의 이동 목표가 있는데, 이것은 많은 혼란과 같은 핵심 문제에 대한 잘못된 보고를 초래했다.
이 문장에서 나는 상황을 분명히 하려고 시도할 것이다.

협동 노선 상황


우리가 핵심에 대해 이야기할 때
우리는 통상적으로 kotlinx.coroutines에 대해 이야기합니다. 기술적으로 말하자면, 이것은 독립된 라이브러리이지만, 실제 상황에서 당신이 실제로 사용하는 것은 협업 프로그램입니다. kotlinx.coroutines를 포함하지 않습니다.
처음, 코트린크스.Kotlin/Native의 협동 루트는 단일 루트입니다.실행을 멈출 수 있지만, 다른 라인에서 작업을 스케줄링할 수 없습니다.Kotlin/Native의 메모리 모델 때문입니다.
Ktor 설계는 이 단일 스레드 모델에서 실행됩니다.또한 iOS에서 Ktor 호출을 메인 라인에서 시작해야 하는 것으로 알고 있습니다.
2019년 말에 Kotlinx를 허용하는 PR 초안이 나왔다.크로스 라인 통신의 협동 루트.이를 MT 분기라고 하며 다중 스레드를 나타냅니다.이 지점에서 병렬 라이브러리 버전이 나왔습니다.현재의 메인 버전은'1.3.9'이고 현재의 다중 스레드 버전은'1.3.9-native-mt'입니다.
변경되지 않으면,kotlinx의 병렬 지점과 발표 모델은 변하지 않을 수 있습니다.Kotlin/네이티브 메모리 모델 업데이트가 완료될 때까지 라우팅을 협동합니다.

회사 명


Ktor는 1.4 버전까지 kotlinx의 단일 스레드 버전과 함께 실행되도록 설계되었습니다.협동 절차.너는 MT 버전으로 그것을 실행할 수 있지만, 네가 있는 범위를 주 라인에 유지하고 동결되지 않도록 조심해야 한다.
해석하기에는 좀 복잡하고 쓸모가 없다. 왜냐하면 그것은 이미 역사가 되었기 때문이다. 그러나 여기에 있다.협동 루트는 스케줄러와 작업을 포함하여 한 범위 내에서 운행된다.스케줄러를 다른 라인에서 코드를 실행하는 것으로 변경하면 범위가 동결됩니다.일단 동결되면 작업이 가지고 있는 모든 내용도 동결된다.따라서 백그라운드 라인에서 Ktor를 사용하는 것과 같은 동작을 실행하면 Ktor가 메인 라인에만 있어도 Invalid Mutability Exception을 받을 수 있습니다.
더 곤혹스러운 부분은 Ktor가 백그라운드에 포함될 때까지 작업을 계속할 것입니다. 그리고 작업을 멈출 것입니다.
이 점을 이해하려면 동영상을 보십시오.
이 문제를 해결하기 위해서는 Ktor를 위해 다른 범위를 유지하고 동결되지 않거나 격리 작업을 해야 합니다.We did that with KaMPKit . 이것은 상당히 추악한 해커이지만, 그것의 일은
또한 Ktor는 비기계 번역 버전에 의존하기 때문에 무의식중에kotlinx의 비기계 번역 버전을 사용할 수 있습니다.의존항 설정이 협동 루트를 명확하게 요구한다고 해도.이 버전을 사용하도록 지정해야 합니다.
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.9-native-mt") {
    version {
        strictly("1.3.9-native-mt")
    }
}

Kotlin 및 Ktor 1.4 버전


Ktor의 1.4 버전은 실제로 이 문제를 해결했다.우리는 한동안 들어 본 적이 없지만, 나는 이것이 이 문제로 인해 많은 사람들을 곤혹스럽게 한다고 생각한다.비록 기계 번역 지점의 문제는 이미 해결되었지만, 현재 발표된 Ktor가 kotlinx의 기계 번역 지점을 도입했기 때문에 상황은 더욱 혼란스러워졌다.협동 절차.프로젝트에 단일 라인 버전의kotlinx가 필요합니다.이런 상황은 약간의 의외의 행위를 초래할 수 있다.
다른 버전에서 Ktor를 시험적으로 사용하려면 우리의 작은 예시 프로그램을 볼 수 있습니다.

touchlab 실험실 / ktorcoroutines 회사


1.4.0의 ktor 복구만 표시


마스터 브랜치는 1.3.72이며 장애가 발생하고 있음을 나타냅니다.kotlin_140 분기에는 업데이트 버전 및 기능 Ktor 예가 있습니다.

문제


Ktor는 주 라인에서 실행해야 합니다.Ktor와 테스트에도 스레드 제한과 관련된 문제가 있습니다.우리는 언젠가 이에 대해 깊이 있게 연구할 것이다.이 점을 주의하세요.
그리고 라세르는 나에게 한 가지logging issue를 알려주었다. 나는 지금 심층적으로 연구할 생각도 없다. 왜냐하면 나는 오늘 이걸 출판하고 싶기 때문이다.

TL;박사


Ktor와kotlinx.1.4 버전 이전의native에서는 협동 루트가 잘 협동되지 않았다.지금 그들은 더욱 잘 합작하고 있다.Ktor 1.4를 사용하면 Kotlinx의 MT 브랜치가 도입될 수 있습니다.따라서 프로젝트가 이 때문에 설계된 것이 아니라면 문제가 될 수 있습니다.
Kamp 툴킷을 업데이트하여 가입한 해커를 삭제했습니다.Ktor는 이제 그냥 Ktor예요.

터치 실험실 / 칸푸키트


Touchlab의 Kamp 패키지는 일련의 코드와 도구의 집합으로 이동 팀이 Kotlin 다중 플랫폼을 사용하여 신속하게 시작할 수 있도록 합니다.

좋은 웹페이지 즐겨찾기