ケトルとコリン


ケトルとコリン


コリン/ネイティブのためのCoroutinesの物語はしばらくの間、そして、そのニュースで複雑でしたthe Kotlin/Native memory model will be changing , コリン/ネイティブのためのコテージは、しばらくの間複雑な物語のままです.
KTORはCoroutinesの周りに構築されます.coroutines状況は基本的にktor関数がどのように機能するかに影響する.この話では、多くの混乱と多くのバグレポートを作成しているが、同じコアの問題を越えて十字架の種類があります.
このポストでは、私は状況に若干の明快さを加えることを試みます.

コルーチンの状況


明らかに、我々がコアについて話しているとき
それは技術的に別のライブラリですが、私は実際にCOOTININSを使用し、Kintlin . Coroutinesを含まない現実的な状況を想像することはできません.
最初に、Kintlinx.コリンズ/ネイティブのコテージはシングルスレッド.実行を中断することができますが、別のスレッドで作業をスケジュールできません.これはKotlin/Nativeの記憶モデルによるものである.
KTORは、このシングルスレッドモデルで実行するように設計されました.また、IOSで知っている限り、メインスレッドからKTOR呼び出しを開始する必要があります.
2019年後半に、Kutlinxを許すドラフトPRが現れました.スレッド間で通信するコルーチン.これを"Multithreaded "の"mt "ブランチと呼びます.この支店から、並列ライブラリリリースがありました.現在のメインリリースは' 1.3.9 'であり、現在のマルチスレッドリリースは' 1.3.9 nativemt 'です.
何かが変化しない限り、パラレルブランチとリリースモデルは、Kutlinxのために同じままであるでしょう.Kotlin/ネイティブメモリモデルの更新までのCooutinesは完了です.

ケーター


1.4まで、KTORはまだKotlinxのシングルスレッドバージョンで実行するように設計されました.コルーチン.あなたはMT版でそれを走らせることができました、しかし、あなたは主な糸にあった範囲を保つのに非常に慎重でなければなりませんでした、そして、それが決して凍らなかったことを確認してください.
それは説明するのは少し複雑であり、それが今の歴史だとして超便利ではないが、ここにあります.Coroutinesはスコープ内で実行されます.別のスレッドでコードを実行するには、ディスパッチャを変更すると、そのスコープが凍結されます.一度冷凍、すべてのジョブも保持される凍結されます.それで、KTORでしていたことと同じスコープ内でバックグラウンドスレッドで何かをしていたなら、KTORがメインスレッド内にあったとしても、InvalidmutabilityExceptionを取得します.
私は、より混乱している部分のうちの1つがKTORがバックグラウンドプロセスのその範囲を含むまで働くということであると思います.
行動でこれを見るために、ビデオを見てください.
この周りを取得するには、いずれかのKTORの別のスコープを維持する必要がありますし、それがない冷凍、またはジョブを分離したことを確認します.We did that with KaMPKit . それはかなり醜いハックだったが、それは働いた.
また、KTORが非MTバージョンに依存するので、あなたは意図的にKotlinxの非MTバージョンを使用することができました.依存関係の設定が明示的に要求されても、COOTINES.そのバージョンを使いたいということを指定する必要があります.
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.9-native-mt") {
    version {
        strictly("1.3.9-native-mt")
    }
}

KollinとKtor 1.4リリース


Ktorの1.4リリースは、実際にこの問題を修正します.私たちは少しの間それについて聞きませんでした、しかし、問題が多くの人々に混乱していたので、私はそれがそうであったと思います.それはMT支店のために固定されていますが、状況はKTlinxのMT支店でKTORの現在のリリースを引くように、いくつかのさらなる混乱を持っています.コルーチン.プロジェクトがKotlinxのシングルスレッドバージョンを期待している場合.coroutinesこの状況は、予期しない動作を引き起こす可能性があります.
異なるバージョンでKTORで実験するには、私たちの小さなサンプルアプリをチェックアウトすることができます.

タッチラボラボ / コルトルコインズ


ちょうど1.4.0でktorの修正を示す


マスターブランチは1.3.72を持ち、発生した障害を示します.Kutlinense 140支店は、更新されたバージョンと機能KTORサンプルを持っています.

課題


KTORはメインスレッドから実行する必要があります.また、スレッドの制限に関連するKTORとテストの問題もあります.我々は、若干の点でこれ以上に掘り下げています.ちょっとそれに気づいてください.
また、ラッセルは私にlogging issue 今日はこれを公開したいので今すぐ掘りさえしない.

TLドクター


KtorとKitlinx.Coroutinesは1.4以前のネイティブではうまく機能しなかった.現在、彼らはより協力します.KTOR 1.4を使用すると、KutlinxのMTブランチで引っ張るでしょう.Cooutinesので、プロジェクトがそのために設計されていない場合は、それはおそらく問題であることに注意してください.
我々はカンプキットを私たちが入れていたハックを削除する更新しました.Ktorは、ちょうど普通のKtorです

タッチラボ / カンプキット


TouchLabによるカンプキットは、コードチームとあなたのモバイルチームを取得するように設計されたツールは、コリンマルチプラットフォームとすぐに開始しました。