web-dev-qa-db-fra.com

Quelles sont les différences entre les systèmes sans état et avec état, et comment ont-elles un impact sur le parallélisme?

Expliquez les différences entre les systèmes sans état et avec état, ainsi que les impacts de l'état sur le parallélisme.

63
Stack Guru

Un système sans état peut être vu comme une boîte [noir? ;)] où, à un moment donné, la valeur de la ou des sorties dépend uniquement de la valeur de la ou des entrées [après un certain temps de traitement]

Un système avec état peut plutôt être vu comme une boîte où, à tout moment, la valeur de la ou des sorties dépend de la valeur de la ou des entrées et d'un état interne, c’est-à-dire Le système à états est comme une machine à états avec " mémoire " comme le même ensemble de valeur d'entrée (s) peut générer différentes sorties en fonction de la précédente entrée (s) reçue (s) par le système.

Du point de vue programmation parallèle, un système sans état, s'il est correctement implémenté, peut être exécuté simultanément par plusieurs threads/tâches sans problème de concurrence [par exemple penser à une fonction réentrante] Un système avec état requiert plusieurs threads d'accès à l'exécution et met à jour l'état interne du système de manière exclusive; un point de synchronisation [synchronisation] sera donc nécessaire. .

75
sergico

Un serveur avec état maintient l’état entre les connexions. Un serveur sans état ne le fait pas.

Ainsi, lorsque vous envoyez une demande à un serveur avec état, cela peut créer un type d'objet de connexion qui enregistre les informations demandées. Lorsque vous envoyez une autre demande, cette demande opère sur l'état de la demande précédente. Ainsi, vous pouvez envoyer une demande pour "ouvrir" quelque chose. Et vous pouvez ensuite envoyer une demande pour la "fermer" plus tard. Entre les deux demandes, cette chose est "ouverte" sur le serveur.

Lorsque vous envoyez une demande à un serveur sans état, il ne crée aucun objet qui assure le suivi des informations relatives à vos demandes. Si vous "ouvrez" quelque chose sur le serveur, le serveur ne conserve aucune information indiquant que quelque chose est ouvert. Une opération "close" n'aurait aucun sens, car il n'y aurait rien à fermer.

HTTP et NFS sont des protocoles sans état. Chaque demande est autonome.

Parfois, les cookies sont utilisés pour ajouter un état à un protocole sans état. Dans HTTP (pages Web), le serveur vous envoie un cookie, puis le navigateur conserve l'état, pour le renvoyer au serveur lors d'une demande ultérieure.

SMB est un protocole avec état. Un client peut ouvrir un fichier sur le serveur et le serveur peut refuser l'accès à ce fichier à d'autres clients jusqu'à ce que le client le ferme.

47
Henish