[Powered by Google Translate] NATE HARDISON: Quand vous avez plusieurs programmes s'ouvrent sur un ordinateur, il semble que tout le exécute en même temps. Par exemple, vous pourriez travailler dans un navigateur Web, comme Firefox ou Internet Explorer, écouter de la musique sur iTunes, et rédiger une dissertation avec Word. Cependant, sous le capot, les programmes effectivement exécuter un à la fois. C'est le travail du système d'exploitation, Windows, Mac OSX, ou Linux, pour gérer chacun de ces processus distincts, selon le programmes sont connus, et basculer entre eux de sorte que lorsque vous passer de la vérification de votre page Facebook pour travailler sur votre essai , Word est celui qui est en cours d'exécution. Parfois, cependant, nous voulons des programmes eux-mêmes pour être en mesure de faire de multiples choses comme ça, aussi. Si vous êtes comme moi, vous avez probablement un tas de différents onglets s'ouvre dans votre navigateur Web, un pour le courrier électronique, une avec un calendrier, et ainsi de suite. Nous pourrions traiter chaque onglet, comme un programme distinct ou d'un processus, comme Google Chrome fait, mais de nombreux programmes utilisent une plus légère version d'un processus appelé un fil. Un fil est une autre unité de traitement, un ensemble d' instructions ou de codes qui peuvent "fonctionner", entre guillemets, en même temps que d'autres threads. C'est ce qui rend possible pour vous de naviguer Facebook tout en écoutant de moi dans l'arrière-plan ou d'avoir deux Des vidéos YouTube à jouer en même temps. Donc, ce thème général, connu sous le nom de concurrence, généralement ne se pose pas si tôt dans les cours d'informatique parce que les détails de bas niveau nécessitent une discussion de les systèmes d'exploitation et analogues. Cependant, le langage de programmation que nous utilisons à l' au début de la CS50, Scratch, fournit quelques outils amusants pour rendre plus facile d'écrire des programmes avec de multiples choses passe à la fois. Lorsque vous créez des programmes à gratter, vous êtes constamment travailler avec les threads. Chaque script Scratch, qui est un bloc de code qui commence par l'un des morceaux de puzzle «quand», peut être considéré comme un thread séparé. Regardons un programme Scratch simple pour voir comment cela fonctionne. Ici, nous avons un objet de poisson ou de sprite, avec deux scripts que les deux commencent lorsque l'on clique sur le bouton petit drapeau vert. Le premier script contrôle les mouvements du poisson. Lorsque le drapeau vert est cliqué, le poisson se placer sur le côté gauche de l'écran, appelé le stade, tourné vers la droite. Puis, dans un ensemble d'instructions qui fonctionnera pour toujours, jusqu'à ce que nous arrêter le programme, le poisson se glisse sur le côté droit, se retourne, remonte sur le côté gauche, et tourne autour de nouveau. Le second script contrôle processus de pensée du poisson. Il s'avère qu'il s'agit d'un poisson affamé. Donc, après avoir attendu pendant 3 secondes, le poisson va penser, «J'ai faim», pour une quatrième seconde. Ce script fonctionne également pour toujours. Et comme on voit, de l'exécution du programme en cliquant sur le drapeau vert, les deux scripts apparaissent pour exécuter simultanément. Le poisson se déplace et pense en même temps. Depuis le pauvre poisson ressemble tellement faim, nous allons ajouter un peu de bouffées de fromage pour manger. On peut espérer qu'ils ne se désintègrent dans l'eau. Lorsque nous ajoutons un sprite deuxième temps, nous allons aussi être en mesure de ajouter dans les scripts correspondant à cette sprite. Et, par conséquent, il y aura une autre série de fils qui allez rencontrer. Pour donner à l'utilisateur de notre programme de contrôle sur le moment où l' poissons affamés se nourriture, disons que chaque fois que l'espace Bar est touché, bouffées fromage apparaître sur la scène de l' poisson à manger. Avant de frapper la barre d'espace, nous voulons garder le fromage bouffées masquée, de sorte que le poisson ne peut pas les voir. Pour ce faire, nous aurons besoin de quelques scripts pour la bouffées fromage sprite. Le premier script, le drapeau vert, sera simplement cacher la nourriture. Contrairement aux autres scripts que nous avons écrit, celui-ci ne gardera pas fonctionne toujours. Il va commencer et terminer très rapidement, à droite quand on clique le bouton drapeau vert. Le script suivant va nous devons attendre que la barre d'espace pour être enfoncée avant de s'exécuter. Nous pouvons appeler attendre une entrée utilisateur "en attente" ou "écoute" pour un événement. Et le code qui s'exécute lorsque l'événement est reçu ou entendu est appelé code de gestion des événements. Notre gestionnaire d'événements Space Bar montrera les bouffées fromage sur l'écran afin que les poissons puissent les manger. À ce stade, tout se présente bien. La prochaine chose que nous devons faire est de trouver la façon d'obtenir le poisson se rendre compte qu'il ya à manger. Ajoutons un autre thread pour le poisson qui ne cessent de vérifie si ou non il est touchant les bouffées fromage. Nous faisons cela dans un thread séparé depuis cette manière, nous pouvons vérifier constamment de la nourriture. Dans le cas contraire, nous serions seulement être en mesure de vérifier périodiquement les aliments entre glisse, se retournant, d'attente, ou de penser. OK. Maintenant, nous allons lancer notre programme de Scratch. Comme prévu, la nourriture immédiatement cache et le nage des poissons affamés d'avant en arrière comme avant. Quand nous avons atteint la barre d'espace, les bouffées fromage venir en vue, et les poissons affamés dit whoo. Mais attendez, c'est bizarre. Comment se fait du poisson "j'ai faim" interrompt la pensée d'autres choses? C'est parce que nous n'avons pas établi une coordination entre les trois scénarios de poissons. Chaque s'exécute dans son propre thread, inconscient de ce qui l' que font les autres. Nous allons résoudre ce problème avant de passer. La coordination entre les threads est une tâche délicate car nous n'ont pas explicitement le contrôle sur le moment où chaque thread exécute ou ne fonctionne pas. Pour envoyer un message à partir d'un thread à l'autre, nous aurons besoin d'utiliser une variable que l'on peut définir, ni écrire, dans un fil et lire dans l'autre. Nous allons créer une variable appelée foodFound que nous pouvons mettre à vrai lorsque le poisson se jette dans les choux au fromage. Eh bien, bien sûr, nous voulons nous assurer que nous réglez-le sur false initialement. Puis, en fil de la pensée du poisson, nous allons vérifier pour voir si le poisson a trouvé de la nourriture avant d'afficher le "j'ai faim" pensée bulle. Maintenant, exécutez le programme à nouveau, nous voyons que le poisson ne soit pas interrompu par des pensées de la faim lorsque le bouffées fromage sont sortis. Le dernier problème que nous avons est que les bouffées fromage ne vont pas de suite après le poisson, GUILLEMETS, «mange» les. À partir des scripts de poissons, il n'y a pas de moyen facile de cacher le fromage bouffées, donc nous avons besoin d'envoyer un message aux choux au fromage sprite de se cacher. Nous pourrions le faire avec une autre variable que les bouffées fromage sprite a accès, ainsi que l'image-objet poisson. Cependant, il ya un moyen plus propre de le faire dans ce cas, depuis au lieu d'envoyer un message à un script qui est quelque part dans le milieu de l'exécution, nous pouvons envoyer le message à un script qui attend pour commencer. Nous faisons cela en ayant le poisson diffuser un événement, celui que nous allons appeler mangé. Ensuite, nous allons créer un script pour les bouffées fromage qui sera attendre pour cet événement. Ceci est similaire à l'événement barre d'espace, sauf que cette temps, l'utilisateur n'est pas celui qui est directement déclenchement de l'événement. Maintenant tout ce que nous avons à faire est de configurer notre dossier variable foodFound à faux, et nous pouvons maintenant donner du poisson affamé que de nombreux portions de fromage bouffées qu'il le souhaite. Donc, pas trop mal, non? En C, l'écriture programmes multi-threads est plus compliquée, mais les bases sont les mêmes. Quoi qu'il en soit, j'espère que vous avez un bon moment la construction de l'amusement programmes concurrents dans Scratch. Mon nom est Nate Hardison. C'est CS50.