Quelle est la différence entre Aller de multithreading et de pthread ou les Threads Java?
Quelle est la différence entre Aller de l'approche de multithreading et d'autres approches, telles que pthread, boost::thread ou les Threads Java?
- Je crois que c'est la "multithreading installations comme un tout", c'est ce qui nous intéresse ici.
- Cela fait seulement quelques jours depuis qu'ils l'ont annoncé, et il y a déjà près de 70 questions à propos de s'en aller... la Puissance de Google.
Vous devez vous connecter pour publier un commentaire.
Cité de Jour 3 Tutoriel <- a lire pour plus d'informations.
Une goroutine ne correspondent pas nécessairement à un OS thread. Il peut avoir de plus petits initial de la taille de la pile et la pile de grandir en tant que de besoin.
Plusieurs gorouitines peuvent être multiplexés dans un seul thread en cas de besoin.
Plus important encore, le concept est telle que décrite ci-dessus, qu'une goroutine est un programme séquentiel qui peut bloquer lui-même, mais ne pas bloquer les autres goroutines.
Goroutines est mis en œuvre comme pthreads dans gccgo, de sorte qu'il peut être identique à l'OS thread, trop.
C'est la séparation de la notion de système d'exploitation, de filetage et de notre pensée de multithreading lors de la programmation.
Dans la référence compilateurs (5g/6g/8g), le maître planificateur (src/pkg/runtime/proc.c) crée des N OS threads, où N est contrôlée par l'exécution.GOMAXPROCS(n) (1 par défaut). Chaque planificateur fil tire une nouvelle goroutine hors de la liste de référence et commence à l'exécuter. Le goroutine(s) de continuer à fonctionner jusqu'à ce qu'un syscall (par ex. printf) ou d'une opération sur un canal est fait, à quel point le planificateur va saisir la prochaine goroutine et l'exécuter à partir du point où il l'avait laissé (voir gosched() appelle dans src/pkg/runtime/chan.c).
La planification, à toutes fins et intentions, est mis en œuvre avec coroutines. La même fonctionnalité peut être écrit dans droit en C à l'aide de setjmp() et longjmp(), Aller (et en d'autres langues en œuvre léger/fils verts) sont seulement automatiser le processus pour vous.
La hausse légers, threads est puisque c'est l'espace utilisateur, la création d'un "thread" est très bon marché (en allouant une petite pile par défaut) et peuvent être très efficaces en raison de la structure de comment les fils de parler à l'autre. L'inconvénient est qu'ils ne sont pas de vrais fils qui signifie un seul thread léger peut bloquer l'ensemble du programme, même quand il semble que tous les fils doivent être en cours d'exécution simultanément.
De l'OMI, ce qui rend le multi-threading, Allez intéressant, c'est que les installations de communication: à la différence de pthread où l'on doit construire l'infrastructure de communications (mutex, les files d'attente, etc.), en Aller, il est disponible par défaut sous une forme commode.
En bref, il est "low friction" à l'aide de threads en raison de la bonne communication installations (s'apparente à Erlang, si je peux dire).
Comme les réponses précédentes ont indiqué, allez routines ne correspondent pas nécessairement à des threads du système cependant j'ai trouvé le suivant utile si vous devez avoir l'augmentation de la performance de multi-threading dès maintenant:
citation de la source
Un exemple de programme qui plafonne mon i5 est-ce (utilise tous les 4 cores à 100% dans htop):
Aujourd'hui, qui ne fait pas "faire" quoi que ce soit, mais de voir comment court/facile/simple c'est par rapport à l'écriture des applications multithread dans d'autres langages tels que Java.