[Powered by Google Translate] NATE Hardison: Wenn Sie habe mehrere Programme offen auf einem
Computer, wie es scheint, alles ist
laufen gleichzeitig.
Zum Beispiel könnten Sie in einem Web-Browser funktionieren wie
Firefox oder Internet Explorer, Musik hören über iTunes,
und das Schreiben eines Aufsatzes mit Word.
Doch unter der Haube, die Programme tatsächlich
laufen nacheinander.
Es ist die Aufgabe des Betriebssystems, Windows, Mac OSX oder
Linux, zu verwalten jede dieser separaten Prozessen, wie der
Programme bekannt sind, und zwischen ihnen wechseln, so dass, wenn Sie
gehen von der Überprüfung Ihrer Facebook-Seite, um die Arbeit an Ihrem Essay
wieder, ist Word derjenige, der läuft.
>> Manchmal, wenn wir wollen Programme selbst in der Lage sein
mehrere Dinge wie diese auch tun.
Wenn Sie wie ich sind, haben Sie wahrscheinlich eine Reihe von
verschiedenen Registerkarten in Ihrem Web-Browser, ein für E-Mail zu öffnen,
eine mit einem Kalender und so weiter.
Wir könnten jede Registerkarte als separates Programm oder Prozess zu behandeln,
wie Google Chrome tut, aber viele Programme ein
leichtere Version von einem Prozess namens einen Thread.
>> Ein Thread ist nur eine weitere Verarbeitungseinheit ein Satz von
Anweisungen oder Code, der "run" kann, Zitat unquote,
gleichzeitig mit anderen Fäden.
Dies ist, was macht es möglich für Sie zu Facebook suchen
beim Hören mich im Hintergrund oder zwei
YouTube-Videos spielen zur gleichen Zeit.
Also, in der Regel diese allgemeine Thema, wie Parallelität bekannt,
kommt nicht so früh in der Informatik Kurse
weil die unteren Ebene Informationen benötigen Diskussion
Betriebssysteme und dergleichen.
Allerdings ist die Programmiersprache verwenden wir bei der
Beginn des CS50, Scratch, bietet einige nette Tools
erleichtern, um Programme mit mehreren Dinge schreiben
Dinge auf einmal.
>> Wenn Sie Scratch-Programme zu bauen, sind Sie ständig
Arbeiten mit Threads.
Jeder Scratch Skript ist, die einen Code-Block, beginnt mit
einer der "wann" Puzzleteile, kann man sich
als separater Thread.
Lassen Sie uns ein einfaches Scratch Programm anschauen, wie das funktioniert.
>> Hier haben wir einen Fisch Objekt oder Sprite, mit zwei Skripte
dass sowohl Start als wir auf das kleine grüne Flagge Taste.
Das erste Skript steuert der Fische Bewegung.
Wenn die grüne Flagge angeklickt wird, wird der Fisch platziert
Auf der linken Seite des Bildschirms, die so genannte Bühne,
nach rechts weist.
Dann, in einer Reihe von Anweisungen, die ewig laufen werde, bis wir
Stoppen des Programms, gleitet die Fische zu der rechten Seite,
dreht sich um, geht zurück auf die linke Seite und
dreht sich wieder um.
Das zweite Skript steuert der Fische Denkprozess.
Es stellt sich heraus, dass dies ein hungriger Fisch ist.
So nach einer Wartezeit von 3 Sekunden, die Fische denken,
"Ich bin hungrig", für ein Viertel Sekunde.
Dieses Skript läuft auch immer.
Und wie wir sehen, von der Ausführung des Programms durch Klicken auf die
grüne Flagge, erscheinen beide Skripte ausgeführt werden
gleichzeitig.
Der Fisch bewegt und hält gleichzeitig.
>> Da die armen Fische sieht so hungrig, lasst uns in einigen hinzuzufügen
kitschig puffs für sie zu essen.
Hoffentlich werden sie nicht im Wasser zerfallen.
Wenn wir in einem zweiten Sprite hinzuzufügen, werden wir auch in der Lage sein
Hinzufügen in entsprechenden Skripten zu diesem Sprite.
Und daher werde es eine andere Reihe von sein
Themen das wird laufen.
Um dem Benutzer unseres Programms Kontrolle darüber, wann die
hungrigen Fischen erhält Nahrung, sagen wir, dass, wenn das Space
Bar getroffen wird, erscheinen kitschig puffs auf der Bühne für die
Fisch zu essen.
Bevor wir die Leertaste drücken, wir wollen das kitschig halten
puffs versteckt, so dass die Fische sie nicht sehen können.
Um dies zu tun, werden wir ein paar Skripte für die Notwendigkeit
kitschig puffs Sprite.
Das erste Skript, die grüne Flagge wird nur verstecken die Nahrung.
Im Gegensatz zu den anderen Skripten wir geschrieben haben, wird dies ein nicht halten
läuft immer.
Es beginnt und endet sehr schnell, direkt, wenn wir auf
die grüne Flagge Taste.
>> Das nächste Skript wir haben, warten Sie die Leertaste zu sein
drückte vor der Ausführung.
Wir können das Anklopfen für Benutzereingaben "Warten" oder "hören"
für ein Ereignis.
Und der Code, wenn ein Ereignis oder empfangen wird ausgeführt
gehört, wird als Event-Handling-Code.
Our Space Bar Ereignishandler zeigt die käsigen puffs auf
den Bildschirm so, dass der Fisch essen.
An diesem Punkt hat alles sieht gut aus.
>> Das nächste, was wir tun müssen, ist, um herauszufinden, wie man
die Fische erkennen, dass es zu essen.
Wir fügen einen anderen Thread zu den Fischen, die ständig
prüft, ob es die Berührung der käsigen Züge.
Wir tun dies in einem separaten Thread, da auf diese Weise können wir
ständig für Lebensmittel zu überprüfen.
Ansonsten würden wir nur in der Lage sein, regelmäßig für Lebensmittel zu überprüfen
zwischen Gleiten und drehte sich um, warten, oder denken.
>> OK.
Nun wollen wir laufen unsere Scratch Programm.
Wie erwartet, das Essen sofort versteckt und die
hungrigen Fischen schwimmt hin und her, genau wie vorher.
Wenn wir die Leertaste drücken, kommen die käsigen puffs in Sicht,
und die hungrigen Fischen, sagt whoo.
Aber warten Sie, das ist seltsam.
Wie kommt der Fisch Gedanken unterbricht "Ich bin hungrig" die
anderen Sachen?
Dies ist, weil wir nicht begründet keine Koordination
zwischen den drei Fische Script.
Jedes Zimmer ist in einem eigenen Thread laufen, vergessen, was der
die anderen machen.
Lassen Sie dieses Problem beheben, bevor wir weitermachen.
>> Koordination zwischen Threads ist eine schwierige Aufgabe, da wir
keine explizite Kontrolle über, wenn jeder Thread läuft oder
nicht ausgeführt.
Um eine Nachricht von einem Thread zu einem anderen zu senden, benötigen wir
eine Variable, die wir eingerichtet haben, können oder schreiben zu verwenden, in einem Thread
und in dem anderen gelesen.
Lassen Sie uns eine Variable namens foodFound, dass wir festlegen können
wahr, wenn der Fisch in den käsigen puffs läuft.
Nun, natürlich wollen wir sicherstellen, dass wir es auf
false, zunächst.
Dann, in der Fische Denken Gewinde, werden wir prüfen, ob
der Fisch essen vor der Anzeige des "Ich bin hungrig" gefunden
dachte Blase.
>> Jetzt läuft das Programm wieder sehen wir, dass die Fische
nicht mit dem Gedanken an Hunger unterbrochen zu werden, wenn die
kitschig puffs sind out.
Der letzte Problem, das wir haben, ist, dass die käsigen puffs nicht gehen
weg nach dem Fisch, zitiere unquote, "frisst" sie.
Von den Fischen Script, gibt es keine einfache Möglichkeit, den käsigen verbergen
Puffs, so müssen wir um eine Nachricht an den käsigen puffs senden
Sprite, um sich zu verstecken.
Wir könnten dies mit anderen Variablen zu tun, dass die käsigen puffs
Sprite hat Zugriff auf sowie die Fische Sprite.
>> Allerdings gibt es ein sauberer Weg, dies zu tun in diesem Fall,
da anstelle des Sendens einer Nachricht zu einem Script, das ist in der
irgendwo in der Mitte der Ausführung, können wir die
Nachricht an ein Skript, das darauf wartet, zu starten ist.
Wir tun dies, indem er den Fisch ausgestrahlt ein Ereignis, ein Wir
rufen gegessen.
Dann werden wir ein Skript für den käsigen puffs, die schaffen
Warten für diese Veranstaltung.
Dies ist vergleichbar mit der Leertaste Ereignis, außer dass diese
Mal ist der Benutzer nicht das man direkt das Ereignis auslöst.
Jetzt müssen wir zu tun haben, wird unsere foodFound Variable zurück
auf false, und wir können jetzt geben die hungrigen Fischen wie viele
Portionen kitschig puffs wie er will.
>> So gar nicht so schlecht, oder?
In C, Schreiben von Multi-Threaded-Programme ist komplizierter,
aber die Grundlagen sind die gleichen.
Wie auch immer, ich hoffe, Sie haben eine tolle Zeit bauen etwas Spaß
nebenläufige Programme in Scratch.
Mein Name ist Nate Hardison.
Dies ist CS50.