Qu’est-ce qu’une coroutine?

Qu’est ce qu’une coroutine? Comment sont-ils liés à la concurrence?

    Les coroutines et la concurrence sont largement orthogonales. Les coroutines sont une structure de contrôle générale dans laquelle le contrôle de stream est passé en coopération entre deux routines différentes sans retour.

    L’instruction ‘yield’ en Python est un bon exemple. Cela crée une coroutine. Lorsque le “rendement” est rencontré, l’état actuel de la fonction est enregistré et le contrôle est renvoyé à la fonction appelante. La fonction appelante peut alors renvoyer l’exécution à la fonction de rendement et son état sera restauré au point où le «rendement» a été rencontré et l’exécution se poursuivra.

    De la programmation à Lua , section ” Coroutines “:

    Une coroutine est similaire à un thread (au sens du multithreading): c’est une ligne d’exécution, avec sa propre stack, ses propres variables locales et son propre pointeur d’instruction; mais il partage des variables globales et surtout n’importe quoi d’autre avec d’autres coroutines. La principale différence entre les threads et les coroutines est que, conceptuellement (ou littéralement, dans une machine multiprocesseur), un programme avec des threads exécute plusieurs threads en parallèle. Les coroutines, en revanche, sont collaboratives: à tout moment, un programme avec coroutines ne lance qu’une seule de ses coroutines, et cette coroutine en cours d’exécution ne suspend son exécution que si elle demande explicitement une suspension.

    Donc, le fait est que les Coroutines sont “collaboratives”. Même dans un système multi-core, il n’y a qu’une seule coroutine à la fois (mais plusieurs threads peuvent être exécutés en parallèle). Il n’y a pas de préemption entre les coroutines, la coroutine en cours d’exécution doit renoncer explicitement à l’exécution.

    Pour la ” concurrency “, vous pouvez consulter la diapositive de Rob Pike:

    La concurrence est la composition de calculs exécutés indépendamment.

    Ainsi, lors de l’exécution de la coroutine A, il passe le contrôle à la coroutine B. Puis, après un certain temps, la coroutine B redonne le contrôle à la coroutine A.

    Coroutine est similaire à la sous-routine / threads. La différence est qu’une fois qu’un appelant a invoqué un sous-programme / thread, il ne reviendra jamais à la fonction d’appel. Mais une coroutine peut revenir à l’appelant après avoir exécuté quelques morceaux de code permettant à l’appelant d’exécuter une partie de son propre code et de revenir au sharepoint coroutine où il a arrêté l’exécution et continuer à partir de là. c’est à dire. Une coroutine a plus d’un point d’entrée et de sortie

    Dans une autre note, dans python, la bibliothèque gevent est une bibliothèque réseau basée sur la coroutine qui vous offre des fonctionnalités filiformes comme les requêtes réseau asynchrones, sans avoir à créer et à détruire des threads. La bibliothèque de coroutine utilisée est greenlet .

    • Coroutines sont d’excellentes fonctionnalités disponibles dans la langue Kotlin
    • Les coroutines sont une nouvelle manière d’écrire du code asynchrone non bloquant (et bien plus encore)
    • La coroutine est des fils légers. Un thread léger signifie qu’il ne correspond pas au thread natif, donc il ne nécessite pas de changement de contexte sur le processeur, donc ils sont plus rapides.
    • il ne correspond pas à un fil natif
    • Les coroutines et les threads sont tous deux multitâches. Mais la différence est que les threads sont gérés par le système d’exploitation et les coroutines par les utilisateurs.

    Fondamentalement, il existe deux types de Coroutines:

    1. Sans empilage
    2. Empilant

    Kotlin implémente des coroutines sans empilage – cela signifie que les coroutines n’ont pas de stack, donc elles ne sont pas mappées sur un thread natif.

    Ce sont les fonctions pour démarrer la coroutine:

     launch{} async{} 

    Vous pouvez en apprendre plus ici:

    https://www.kotlindevelopment.com/deep-dive-coroutines/

    https://blog.mindorks.com/what-are-coroutines-in-kotlin-bf4fecd476e9