Quelles sont les différences entre le blocage avec synchrone, non-bloquant et asynchrone? [dupliquer]

cette question a déjà une réponse ici:

  • asynchrone vs non-bloquant 12 réponses

je lis 'Operation System Concepts With Java'. Je suis assez confus par le concept de blocage et synchrone, quelles sont les différences entre eux?

20
demandé sur Mat 2011-12-07 18:25:00

4 réponses

Le blocage

peut être ou ne pas être synchrone, selon le contexte. Quand nous parlons d'appels de méthode, alors un appel synchrone peut aussi être dit comme bloquant (je reviendrai là-dessus dans un peu de temps), parce que le thread appelant la méthode ne peut pas avancer jusqu'à ce que la méthode revienne. L'antonyme dans ce cas serait asynchrone.

dans la terminologie des serrures, une serrure est dite bloquante si le fil attendant de l'acquérir est mis en mode suspendu jusqu'à ce que le verrou devient disponible (ou jusqu'à ce qu'un délai s'écoule). L'antonym dans ce cas est une serrure non bloquante, ce qui signifie que le thread retourne immédiatement même s'il ne peut pas acquérir la serrure. Ceci peut être utilisé pour implémenter le soi-disant verrou tournant, où vous continuez à sonder l'état du verrou tout en gardant le thread actif.

Ayant dit cela, vous pouvez extrapoler la différence entre les concepts: synchrone signifie généralement une activité qui doit attendre une réponse avant le fil peut aller de l'avant. Le blocage fait référence au fait que le thread est placé dans un État d'attente (ce qui signifie généralement qu'il ne sera pas programmé pour l'exécution jusqu'à ce qu'un événement se produise). À partir de là, vous pouvez conclure qu'un appel synchrone peut impliquer un comportement de blocage ou peut ne pas l'être, selon l'implémentation sous-jacente (i.e. il peut également tourner, ce qui signifie que vous simulez un comportement synchrone avec des appels asynchrones).

18
répondu Tudor 2016-04-04 16:26:22

je les classerais comme suit:

de Blocage en Fil d'attente sur l'action jusqu'à la réussite ou à l'échec (mettre en surbrillance sur "attendra", de l'échec est souvent un délai d'attente)

Synchrone - Thread va terminer l'action, soit par la réussite ou de l'échec, avant d'atteindre n'importe quelle ligne après elle (mettre en surbrillance sur l'action d'achèvement)

Non-blocage - Thread ne va pas attendre pour terminer l'action, exécute immédiatement à l'action

asynchrone - un autre thread (logique ou physique) va compléter l'action ou l'informer qu'il est prêt en utilisant un callback, ne va pas attendre avant d'exécuter les commandes suivantes. Note: à partir de là, le nom asynchrone commence, puisque vous ne pouvez pas être sûr dans quel ordre les commandes vont s'exécuter

3
répondu Bar Wachtel 2014-09-23 14:09:37

synchrone signifie que le travail est fait dans le thread qui appelle la fonction et la méthode ne retourne pas que c'est fini.

les méthodes asynchrones reviennent immédiatement parce qu'un autre fil fait le travail et soulève un drapeau ou déclenche un événement lorsque le travail est terminé.

blocage signifie que le thread exécutant un événement de blocage attendra jusqu'à ce que l'événement se produise. par exemple, vous essayez de lire à partir d'une prise et aucun vous envoie un message. l'appel de blocage ne reviendra pas tant que le message n'aura pas été réanimé à partir de la socket.

bien et non-blocage signifie l'opposé du blocage avec implique que les appels non-blocage sont asynchrones.

2
répondu Michael Haidl 2011-12-07 14:33:24

Blocage de l'opération sont dit d'avoir de blocage de comportement si elle attend un événement à devenir complète. Par exemple: si une serrure n'est pas disponible, un thread peut entrer dans un État d'attente sur event till lock. Une telle opération serait bloquante.

appel synchrone - synchrone peut être facilement compris avec un exemple de protocole http où le client attend la réponse du serveur puis procède. Les appels synchrones peuvent être bloquants ou non.

Asynchrone d'Une méthode asynchrone appeler une autre méthode. Après un appel, il peut continuer à exécuter ses instructions. Quand la méthode appelée termine l'exécution it, elle envoie une réponse / callback à la méthode caller de son succès ou de son échec.

Non-bloquant Non-bloquant comportement, c'est comme la vérification de l'état au niveau de cette instance. Par exemple - dans le cas de serrures si elle n'est pas disponible, elle n'attendra pas jusqu'à ce qu'elle soit disponible comme opération de blocage. Nous avons également besoin d' pour vérifier à plusieurs reprises la disponibilité des serrures car il n'y aura pas de rappel comme les appels asynchrones.

résumé: Le blocage est toujours synchrone.

appel synchrone ont des opérations de blocage s'il attend un événement pour obtenir complète, la méthode de l'appelant peut entrer l'état d'attente.

appel synchrone ne bloque pas, s'il vérifie à plusieurs reprises qu'un événement se produit avant de procéder à l'instruction suivante. Appelant la méthode n'entrez pas attendre précisez sur un événement à compléter.

appel asynchrone ne peut pas être le blocage et il implique le rappel de la méthode appelée qui doit gérer.

1
répondu Disha Agrawal 2018-02-19 05:07:07