J'ai décidé d'écrire un peu plus d'explication détaillée.
La "magie" ici réside dans le système d'exploitation. Les deux programmes ne commencer à peu près au même moment, et d'exécuter en même temps (le système d'exploitation attribue des tranches de temps sur le processeur à exécuter) comme tous les autres simultanément les processus en cours d'exécution sur votre ordinateur (y compris l'application terminal et le noyau). Donc, avant que toutes les données sont transmises, les processus sont en train de faire ce que l'initialisation nécessaire. Dans votre exemple, la queue est l'analyse de la '-20' argument et le chat est l'analyse de la 'file.txt l'argument et de l'ouverture du fichier. À un certain point, la queue va en arriver au point où elle en a besoin en entrée et qu'il va dire le système d'exploitation qu'il est en attente d'entrée. À un autre moment (avant ou après, il n'a pas d'importance) le chat va commencer à passer des données pour le système d'exploitation à l'aide de la sortie standard stdout. Cela va dans un tampon dans le système d'exploitation. La prochaine fois que la queue obtient une tranche de temps du processeur après certaines données a été mis en mémoire tampon par chat, il va récupérer une certaine quantité de données (ou le tout) ce qui laisse le tampon sur le système d'exploitation. Lorsque le tampon est vide, à un certain point, la queue va avoir à attendre pour le chat à la sortie de plus de données. Si le chat a une sortie de données beaucoup plus rapides que la queue est de la manipulation, la mémoire tampon se développer. chat finira par être fait de la sortie des données, mais la queue sera toujours traitement, de sorte que le chat va se fermer et queue de traiter toutes les données restantes dans la mémoire tampon. Le système d'exploitation sera le signal de queue quand il leur est le plus de données entrantes avec un EOF. Queue de traiter le reste des données. Dans ce cas, la queue est probablement juste de recevoir toutes les données dans une mémoire tampon circulaire de 20 lignes, et quand il est signalée par le système d'exploitation qu'il n'y est pas plus de données entrantes, il exporte ensuite les vingt dernières lignes de son propre stdout, qui est affiché dans le terminal. Depuis la queue est beaucoup plus simple de programme de chat, il va probablement passer la plupart du temps d'attente pour chat pour mettre les données dans la mémoire tampon.
Sur un système avec plusieurs processeurs, les deux programmes ne seront pas seulement le partage de l'alternance de tranches de temps sur le même processeur core, mais probablement en cours d'exécution au même moment sur des cœurs.
Pour entrer dans un peu plus en détail, si vous ouvrez une sorte de moniteur de processus (système d'exploitation spécifique) comme "haut" dans Linux, vous verrez une liste de tous les processus en cours d'exécution, dont la plupart sont de l'utilisation efficace de 0% du processeur. La plupart des applications, sauf si elles sont à croquer des données, passent la plupart de leur temps à ne rien faire. C'est bon, parce qu'il permet à d'autres procédés d'avoir libre accès au processeur en fonction de leurs besoins. Ceci est accompli en gros de trois façons. Un processus peut obtenir un sommeil(n) style instruction où il raconte essentiellement le noyau d'attendre les n millisecondes avant de lui donner une autre tranche de temps pour travailler avec. Le plus souvent un programme doit attendre quelque chose à partir d'un autre programme, comme la "queue" en attente de plus de données pour entrer dans la mémoire tampon. Dans ce cas, le système d'exploitation va se réveiller le processus lorsque plus de données seront disponibles. Enfin, le noyau peut préempter un processus dans le milieu de l'exécution, en donnant quelques processeur tranches de temps à d'autres processus. 'cat' et de la 'queue' sont de simples programmes. Dans cet exemple, la queue passe la plupart de son temps à attendre pour plus de données sur de la mémoire tampon, et le chat passe le plus clair de son temps à attendre pour le système d'exploitation de récupérer les données du disque dur. Le goulot d'étranglement est la vitesse (ou la lenteur) du support physique que le fichier est stocké. Que délai perceptible que vous pourriez détecter lorsque vous exécutez cette commande pour la première fois, c'est le temps qu'il faut pour les têtes de lecture sur le lecteur de disque de chercher à la position sur le disque dur où "file.txt' est. Si vous exécutez la commande une seconde fois, le système d'exploitation va probablement être le contenu de file.txt dans la mémoire cache, et vous ne sera probablement pas voir tout délai perceptible (à moins que file.txt est très grand, ou le fichier n'est plus mis en cache.)
La plupart des opérations que vous effectuez sur votre ordinateur sont IO lié, c'est à dire que vous êtes habituellement en attente de données à venir à partir de votre disque dur ou à partir d'un périphérique réseau, etc.