Quelle est la différence entre un fil et de la fibre optique?
Quelle est la différence entre un fil et de la fibre optique? J'ai entendu parler de fibres de ruby et je l'ai lu, entendu qu'ils sont disponibles dans d'autres langues, quelqu'un pourrait m'expliquer en termes simples ce qu'est la différence entre un fil et de la fibre optique.
Vous devez vous connecter pour publier un commentaire.
Dans les termes les plus simples, les threads sont généralement considérés comme de préemption (même si cela peut ne pas être toujours le cas, selon le système d'exploitation) tandis que les fibres sont considérées à la lumière-poids, d'une coopérative de threads. Les deux sont séparés de chemins d'exécution de votre application.
Avec des threads: l'exécution en cours de chemin d'accès peut être interrompu ou retardé à tout moment (note: cette instruction est une généralisation et ne peut pas toujours vrai selon les OS/filetage package/etc.). Cela signifie que pour les threads, l'intégrité des données est un gros problème parce que l'un thread peut être arrêté au milieu de la mise à jour d'un bloc de données, en laissant l'intégrité des données dans une mauvaise ou incomplète de l'état. Cela signifie également que le système d'exploitation peut tirer parti de plusieurs Processeurs ou cœurs par l'exécution de plusieurs threads en même temps et laisser le développeur de garde d'accès aux données.
Avec des fibres: l'actuel chemin d'exécution est interrompue lorsque la fibre rendements de l'exécution (même remarque que ci-dessus). Cela signifie que les fibres de toujours démarrer et arrêter dans des endroits bien définis, de sorte que l'intégrité des données est beaucoup moins un problème. Aussi, parce que les fibres sont souvent gérés dans l'espace utilisateur, cher changements de contexte et CPU changements d'état n'a pas besoin d'être apportées, en faisant de changer de fibre pour la prochaine extrêmement efficace. D'autre part, puisque aucune des deux fibres peuvent exécuter exactement au même moment, en utilisant seulement les fibres seront les seuls à ne pas profiter de plusieurs Processeurs ou plusieurs cœurs de PROCESSEUR.
Threads utilisent de préemption de planification, tandis que les fibres utilisation coopérative de la planification.
Avec un fil, le contrôle de flux peut être interrompue à tout moment, et qu'un autre thread puisse prendre le dessus. Avec plusieurs processeurs, vous pouvez avoir plusieurs threads en cours en même temps (simultanée multithreading, ou SMT). Comme un résultat, vous devez être très attention sur simultanées d'accès aux données, et de protéger vos données avec des mutex, sémaphores, les variables de condition, et ainsi de suite. Il est souvent très difficile d'obtenir le droit.
Avec une fibre, un contrôle seulement des interrupteurs lorsque vous lui dites, généralement avec un appel de fonction dont le nom ressemble à
yield()
. Cela rend les données en simultané accès plus facile, puisque vous n'avez pas à vous soucier de l'atomicité des structures de données ou les mutex. Tant que vous n'avez pas le rendement, il n'y a aucun risque d'être préempté et d'avoir un autre fibre d'essayer de lire ou de modifier les données que vous travaillez avec. En conséquence, si, si votre fibre arrive dans une boucle infinie, aucune autre fibre peut exécuter, puisque vous n'êtes pas céder.Vous pouvez également mélanger les fils et les fibres, ce qui donne lieu à des problèmes rencontrés par les deux. N'est pas recommandé, mais il peut parfois être la bonne chose à faire si c'est fait avec soin.
Dans Win32, une fibre est une sorte de géré par l'utilisateur de fil. Fibre a sa propre pile et son propre pointeur d'instruction, etc., mais les fibres ne sont pas prévues par le système d'exploitation: vous appelez l'SwitchToFiber explicitement. Les Threads sont, en revanche, de manière préventive prévue par le système d'exploitation. Donc grosso modo une fibre optique est un fil qui est géré au niveau de l'application/exécution, plutôt que d'être un vrai système d'exploitation fil.
Les conséquences sont que les fibres sont moins chers et que l'application a plus de contrôle sur la planification. Cela peut être important si l'application crée un grand nombre de tâches simultanées, et/ou veut en étroite collaboration optimiser lorsqu'ils s'exécutent. Par exemple, un serveur de base de données peut choisir d'utiliser des fibres plutôt que de threads.
(Il peut y avoir d'autres usages pour la même durée, comme indiqué, c'est le Win32 définition.)
D'abord je vous conseillerais de lire cette explication de la différence entre les processus et les threads comme arrière-plan.
Une fois que vous avez lu que c'est assez simple. Threads peut être mis en œuvre, soit dans le noyau, dans l'espace utilisateur, ou les deux peuvent être mélangés. Les fibres sont essentiellement des threads mis en œuvre dans l'espace utilisateur.
À la rubrique 11.4, "les Processus et les Threads dans Windows Vista de Systèmes d'Exploitation Modernes, Tanenbaum commentaires:
Noter qu'en plus des Fils et des Fibres, Windows 7 introduit L'Utilisateur De Planification De Mode:
Plus d'informations sur les fils, fibres et UMS est disponible en regardant Dave Probert: à l'Intérieur de Windows 7 en Mode Utilisateur Planificateur (UMS).
Threads sont planifiées par le système d'exploitation (préventive). Un thread peut être arrêté ou de la reprise à tout moment par le système d'exploitation, mais les fibres plus ou moins gérer eux-mêmes (coopérative) et de rendement pour les uns les autres. Qui est, le programmeur commandes lorsque les fibres ne leur traitement, et lorsque que le traitement passe à une autre fibre.
Fils ont été initialement créé comme processus légers. De manière similaire, les fibres sont un thread léger, en s'appuyant (simpliste) sur les fibres elles-mêmes à l'annexe uns des autres, par la cession du contrôle.
Je suppose que la prochaine étape sera brins où vous devez envoyer un signal à chaque fois que vous le souhaitez exécuter une instruction (pas contrairement à mon 5yo fils :-). Dans les vieux jours (et même maintenant sur certaines plateformes embarquées), tous les threads ont été les fibres, il n'y a pas de droit de préemption et vous avez eu à écrire votre fils à se comporter correctement.
Threads généralement compter sur le noyau d'interrompre le fil de sorte qu'il ou un autre thread peut s'exécuter (ce qui est mieux connu sous le nom de préemption multitâche) tandis que les fibres utilisation de la co-operative multitâche où il est de la fibre elle-même qui donne le son temps de course, de sorte que d'autres fibres pouvez exécuter.
Quelques liens utiles à l'expliquer mieux que je l'ai probablement fait sont:
Win32 fibre de définition est en fait "Fil Vert" définition établie chez Sun Microsystems. Il n'y a pas besoin de gaspiller de l'expression de la fibre sur le fil d'une certaine sorte, c'est à dire, un thread en cours d'exécution dans l'espace utilisateur en vertu du code d'utilisateur/thread-contrôle de la bibliothèque.
De préciser l'argument de regarder les commentaires suivants:
l'exécution en parallèle sur plusieurs pipelines, à l'aide de canalisations de manière plus efficace.
Nous devons supposer que les processus sont faits de fils et que le fils doit être fabriqué à partir de fibres. Avec cette logique dans l'esprit, à l'aide de fibres pour d'autres sortes de threads est mauvais.