Je suis assez familier avec où utiliser des piles, des files d'attente et des arbres dans des applications logicielles, mais je n'ai jamais utilisé une dentelle (file d'attente à double extrémité) auparavant. Où pourrais-je généralement les rencontrer à l'état sauvage? Serait-ce dans les mêmes endroits qu'une file d'attente, mais avec des gribiles supplémentaires?
Excellente question. Je ne me souviens pas du parcours de notre CS 102 mentionnant une seule application pour la file d'attente à double extrémité.
À ce jour, la seule application que je connaisse est le planificateur de vol de travail mentionné dans l'article Wikipedia Article .
Cela fonctionne essentiellement comme suit:
Dans un modèle de procédure normal, à une seule fonction, chaque appel de fonction pousse un enregistrement d'activation sur un appel dite pile . Un enregistrement d'activation contient les variables locales et les paramètres de cet appel. Une fois que l'appel à la méthode est terminé ("renvoie"), le dernier enregistrement d'activation est apparu de la pile d'appels.
Ceci est particulièrement important car c'est la manière dont la récursion est mise en œuvre: la structure de la récursivité est représentée dans l'état actuel de la pile d'appel.
Lors de la mise en place d'un algorithme récursif, nous pouvons exploiter cette propriété en remplaçant la pile d'appels avec une file d'attente d'appel. Chaque thread du calcul obtient sa propre file d'attente d'appel et pousse et affiche des enregistrements d'activation comme dans une exécution séquentielle.
Mais une fois le fil a terminé son travail (= sa file d'attente d'appel est vide), il vole fonctionne d'un autre fil en supprimant un enregistrement d'activation de cet appel de cet appel de thread la file d'attente en supprimant de la "mauvaise" fin.
Fondamentalement, la file d'attente d'appel agit comme deux piles d'appel qui servent maintenant deux threads.