[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.