Exécuter deux threads en même temps
Je veux savoir si un programme peut exécuter deux threads en même temps (c'est en gros ce qu'il est utilisé pour corriger?). Mais si je devais faire un appel système dans une fonction où il s'exécute sur Un thread, et l'ont fait d'autres tâches en cours d'exécution dans une autre fonction où il s'exécute sur le fil B, seraient-ils à la fois être en mesure d'exécuter en même temps ou mon deuxième fonction d'attendre jusqu'à ce que le système d'appel finitions?
Ajouter à ma question initiale: Maintenant, serait-ce encore un sans coupure processus, alors que l'appel système est en cours? Je parle de l'utilisation de tout système d'appel sur UNIX/LINUX.
source d'informationauteur user2644819
Vous devez vous connecter pour publier un commentaire.
Multi-threading et le traitement en parallèle sont deux choses complètement différentes rubriques, chaque digne de sa propre conversation, mais pour le bien de l'introduction...
Filetage:
Lorsque vous lancer un fichier exécutable, il s'exécute dans un thread au sein d'un processus. Lorsque vous lancez un autre thread, appeler le thread 2, vous avez maintenant 2 séparément exécution de chaînes (threads) dans le même processus. Sur un seule base de microprocesseur (vers le haut), il est possible d'exécuter plusieurs threads, mais pas en parallèle. Bien que conceptuellement les fils sont souvent dit de courir à la même temps, ils sont effectivement en cours d'exécution de façon consécutive dans les tranches de temps allouées et contrôlé par le système d'exploitation. Ces tranches sont entrelacés les uns avec les autres. Ainsi, l'exécution des mesures de fil 1 ne sont pas réellement se produire en même temps que l'exécution des mesures de fil 2. Ces comportements s'étendent généralement à autant de threads que vous créez, c'est à dire les paquets d'exécution des chaînes de travailler tous dans le même processus et le partage de tranches de temps octroyée par le système d'exploitation.
Donc, dans votre appel système exemple, cela dépend vraiment de ce que le système d'appel est de savoir si ou non il aurait fini avant d'autoriser l'exécution des mesures de l'autre thread pour continuer. Plusieurs facteurs jouent dans ce qui va se passer: Est-ce un appel bloquant? Ne un fil ont plus de priorité que les autres. Quelle est la durée des tranches de temps?
Liens pertinents à filetage dans C:
DONC Exemple
POSIX
C ANSI
Traitement Parallèle:
Lorsque le multi-thread exécution du programme s'effectue sur un multiple système de base (plusieurs, ou plusieurs multi-core) threads peuvent s'exécuter simultanément, ou en parallèle que les différents threads peuvent être séparés pour séparer les noyaux de partager la charge de travail. C'est un exemple de traitement en parallèle.
De nouveau, sur le plan conceptuel, le traitement parallèle et threading sont pensés pour être semblables en ce qu'ils permettent de choses à faire simultanément. Mais c'est le concept, ils sont vraiment très différents, dans les deux cibles de l'application et de la technique. Où le filetage est utile comme un moyen d'identifier et de séparer un ensemble de tâches au sein d'un processus (par exemple, un serveur TCP/IP peut lancer un thread de travail lorsqu'une nouvelle connexion est demandée, puis se connecte, et soutient que la connexion tant qu'il en reste), le traitement parallèle est généralement utilisée pour envoyer de plus petits composants de la même tâche (eg. un ensemble complexe de calculs qui peuvent être effectuées de façon indépendante dans des endroits distincts) séparées ressources (carottes, ou uPs) à être réalisées simultanément. C'est là que plusieurs processeurs core vraiment faire une différence. Mais le traitement parallèle profite également de plusieurs systèmes, populaire dans des domaines tels que la génétique et MMORPG de jeu.
Des liens pertinents pour le traitement parallèle en C:
OpenMP
Plus OpenMP (exemples)
Gribble Labs - Introduction à la OpenMP
CUDA Toolkit de NVIDIA
Autres lectures sur le sujet général de filetage et de l'architecture:
Ce résumé de filetage et de l'architecture effleure à peine la surface. Il y a beaucoup de pièces de à la le sujet. Des livres pour les résoudre serait remplir une petite bibliothèqueet il y a des milliers de liens. Il n'est pas surprenant dans le vaste sujet de certains concepts ne semblent pas suivre la raison. Par exemple, il n'est pas certain que d'avoir simplement plus de cœurs, elle sera plus rapide des programmes multi-thread.
Oui, ils seraient, au moins potentiellement, exécuter "en même temps", c'est exactement ce que les threads sont pour; bien sûr, il ya beaucoup de détails, par exemple:
Si les deux threads s'exécutent les appels système par exemple écrire dans le même fichier descripteur ils pourraient bloquer temporairement les uns des autres.
Si fil des primitives de synchronisation comme les mutex sont utilisés, puis l'exécution en parallèle sera bloqué.
Vous avez besoin d'un processeur d'au moins deux cœurs, afin d'avoir deux threads vraiment exécuter en même temps.
C'est un très grand et très complexe.
Si votre ordinateur ne dispose que d'un seul PROCESSEUR, vous devez savoir comment il peut exécuter plusieurs threads en même temps.
Dans un seul processeur systèmes, un seul thread d'exécution se produit à un instant donné. parce que sur un Seul processeur de soutien des systèmes logiques de concurrence, pas de physique de la simultanéité.
Sur les systèmes multiprocesseurs, plusieurs threads sont, en fait, à exécuter dans le même temps, la physique et la simultanéité est atteint.
L'élément important des programmes multitâche est qu'ils soutiennent la logique de la concurrence, pas si physique de simultanéité est réellement atteint.
Elles s'exécutent dans le même temps, pour un thread est indépendant de l'autre, même si vous effectuez un appel système.
Il est assez facile de le tester, vous pouvez en créer un thread qui imprime quelque chose à la sortie de la console et d'effectuer un appel système à un autre fil, que vous savez prendre un certain laps de temps raisonnable. Vous remarquerez que les messages continuent à être imprimé par l'autre thread.
Oui, Un programme peut s'exécuter de deux
threads
en même temps.il est appelé Multi threading.
Ils sont en mesure d'exécuter en même temps.
si vous le souhaitez, vous pouvez faire du fil B attendre jusqu'à ce Fil Une fin ou l'inverse
Les bases sont simples, mais les détails sont complexes rapidement.
Vous pouvez découper un programme en plusieurs threads (si il est logique de le faire), et chaque thread se lancer "à son rythme", de telle sorte que si l'on doit attendre, par exemple, un fichier I/O qui ne ralentit pas les autres.
Sur un seul processeur à plusieurs threads sont bloqués par "tranches de temps" le processeur en quelque sorte-que ce soit sur une simple horloge de base ou en laissant un thread d'exécution jusqu'à ce qu'il doit attendre (par exemple, pour les I/O) et puis "commutation" pour le prochain thread. Il y a tout un art/science de le faire pour un maximum d'efficacité.
Sur un multi-processeur (comme la plupart des Pc modernes qui ont de 2 à 8 "carottes") chaque thread est affecté à un processeur distinct, et si il n'y a pas assez de processeurs, puis ils sont partagés dans le seul et unique processeur cas.
L'ensemble de la zone d'assurer "atomicité" des opérations par un seul thread, et d'assurer que les fils ne sont pas en quelque sorte interfèrent les uns avec les autres est incroyablement complexe. En général, il y a un "noyau" ou "noyau" de la catégorie de l'appel système qui ne sera pas interrompu par un autre thread, mais c'est seulement un petit sous-ensemble de tous les appels système, et vous devez consulter la documentation du système d'exploitation pour savoir à quelle catégorie appartient un système d'appel tombe dans.
Deux threads peuvent s'exécuter simultanément que si elle est en cours d'exécution sur plusieurs processeurs core système, mais si elle n'a qu'un seul core processeur, puis deux threads ne peuvent pas fonctionner simultanément. Donc un seul thread à la fois et si il a finit son travail puis le prochain thread qui est sur la file d'attente de prendre le temps.