1 00:00:07,360 --> 00:00:09,360 [Powered by Google Translate] NATE Hardison: Wenn Sie habe mehrere Programme offen auf einem 2 00:00:09,360 --> 00:00:11,250 Computer, wie es scheint, alles ist 3 00:00:11,250 --> 00:00:12,880 laufen gleichzeitig. 4 00:00:12,880 --> 00:00:15,350 Zum Beispiel könnten Sie in einem Web-Browser funktionieren wie 5 00:00:15,350 --> 00:00:19,360 Firefox oder Internet Explorer, Musik hören über iTunes, 6 00:00:19,360 --> 00:00:21,490 und das Schreiben eines Aufsatzes mit Word. 7 00:00:21,490 --> 00:00:24,240 Doch unter der Haube, die Programme tatsächlich 8 00:00:24,240 --> 00:00:25,830 laufen nacheinander. 9 00:00:25,830 --> 00:00:29,750 Es ist die Aufgabe des Betriebssystems, Windows, Mac OSX oder 10 00:00:29,750 --> 00:00:33,070 Linux, zu verwalten jede dieser separaten Prozessen, wie der 11 00:00:33,070 --> 00:00:35,900 Programme bekannt sind, und zwischen ihnen wechseln, so dass, wenn Sie 12 00:00:35,900 --> 00:00:38,610 gehen von der Überprüfung Ihrer Facebook-Seite, um die Arbeit an Ihrem Essay 13 00:00:38,610 --> 00:00:41,590 wieder, ist Word derjenige, der läuft. 14 00:00:41,590 --> 00:00:44,890 >> Manchmal, wenn wir wollen Programme selbst in der Lage sein 15 00:00:44,890 --> 00:00:47,440 mehrere Dinge wie diese auch tun. 16 00:00:47,440 --> 00:00:49,630 Wenn Sie wie ich sind, haben Sie wahrscheinlich eine Reihe von 17 00:00:49,630 --> 00:00:52,730 verschiedenen Registerkarten in Ihrem Web-Browser, ein für E-Mail zu öffnen, 18 00:00:52,730 --> 00:00:55,070 eine mit einem Kalender und so weiter. 19 00:00:55,070 --> 00:00:58,270 Wir könnten jede Registerkarte als separates Programm oder Prozess zu behandeln, 20 00:00:58,270 --> 00:01:01,300 wie Google Chrome tut, aber viele Programme ein 21 00:01:01,300 --> 00:01:04,430 leichtere Version von einem Prozess namens einen Thread. 22 00:01:04,430 --> 00:01:07,190 >> Ein Thread ist nur eine weitere Verarbeitungseinheit ein Satz von 23 00:01:07,190 --> 00:01:10,100 Anweisungen oder Code, der "run" kann, Zitat unquote, 24 00:01:10,100 --> 00:01:12,560 gleichzeitig mit anderen Fäden. 25 00:01:12,560 --> 00:01:15,150 Dies ist, was macht es möglich für Sie zu Facebook suchen 26 00:01:15,150 --> 00:01:17,940 beim Hören mich im Hintergrund oder zwei 27 00:01:17,940 --> 00:01:20,790 YouTube-Videos spielen zur gleichen Zeit. 28 00:01:20,790 --> 00:01:24,660 Also, in der Regel diese allgemeine Thema, wie Parallelität bekannt, 29 00:01:24,660 --> 00:01:26,930 kommt nicht so früh in der Informatik Kurse 30 00:01:26,930 --> 00:01:29,790 weil die unteren Ebene Informationen benötigen Diskussion 31 00:01:29,790 --> 00:01:31,930 Betriebssysteme und dergleichen. 32 00:01:31,930 --> 00:01:34,170 Allerdings ist die Programmiersprache verwenden wir bei der 33 00:01:34,170 --> 00:01:38,000 Beginn des CS50, Scratch, bietet einige nette Tools 34 00:01:38,000 --> 00:01:40,390 erleichtern, um Programme mit mehreren Dinge schreiben 35 00:01:40,390 --> 00:01:42,390 Dinge auf einmal. 36 00:01:42,390 --> 00:01:45,050 >> Wenn Sie Scratch-Programme zu bauen, sind Sie ständig 37 00:01:45,050 --> 00:01:46,760 Arbeiten mit Threads. 38 00:01:46,760 --> 00:01:49,770 Jeder Scratch Skript ist, die einen Code-Block, beginnt mit 39 00:01:49,770 --> 00:01:52,600 einer der "wann" Puzzleteile, kann man sich 40 00:01:52,600 --> 00:01:54,380 als separater Thread. 41 00:01:54,380 --> 00:01:58,040 Lassen Sie uns ein einfaches Scratch Programm anschauen, wie das funktioniert. 42 00:01:58,040 --> 00:02:01,730 >> Hier haben wir einen Fisch Objekt oder Sprite, mit zwei Skripte 43 00:02:01,730 --> 00:02:05,000 dass sowohl Start als wir auf das kleine grüne Flagge Taste. 44 00:02:05,000 --> 00:02:07,290 Das erste Skript steuert der Fische Bewegung. 45 00:02:07,290 --> 00:02:09,850 Wenn die grüne Flagge angeklickt wird, wird der Fisch platziert 46 00:02:09,850 --> 00:02:12,450 Auf der linken Seite des Bildschirms, die so genannte Bühne, 47 00:02:12,450 --> 00:02:14,090 nach rechts weist. 48 00:02:14,090 --> 00:02:17,070 Dann, in einer Reihe von Anweisungen, die ewig laufen werde, bis wir 49 00:02:17,070 --> 00:02:20,270 Stoppen des Programms, gleitet die Fische zu der rechten Seite, 50 00:02:20,270 --> 00:02:22,900 dreht sich um, geht zurück auf die linke Seite und 51 00:02:22,900 --> 00:02:24,470 dreht sich wieder um. 52 00:02:24,470 --> 00:02:27,410 Das zweite Skript steuert der Fische Denkprozess. 53 00:02:27,410 --> 00:02:29,290 Es stellt sich heraus, dass dies ein hungriger Fisch ist. 54 00:02:29,290 --> 00:02:32,080 So nach einer Wartezeit von 3 Sekunden, die Fische denken, 55 00:02:32,080 --> 00:02:34,420 "Ich bin hungrig", für ein Viertel Sekunde. 56 00:02:34,420 --> 00:02:36,440 Dieses Skript läuft auch immer. 57 00:02:36,440 --> 00:02:38,940 Und wie wir sehen, von der Ausführung des Programms durch Klicken auf die 58 00:02:38,940 --> 00:02:41,730 grüne Flagge, erscheinen beide Skripte ausgeführt werden 59 00:02:41,730 --> 00:02:43,100 gleichzeitig. 60 00:02:43,100 --> 00:02:46,460 Der Fisch bewegt und hält gleichzeitig. 61 00:02:46,460 --> 00:02:49,030 >> Da die armen Fische sieht so hungrig, lasst uns in einigen hinzuzufügen 62 00:02:49,030 --> 00:02:50,670 kitschig puffs für sie zu essen. 63 00:02:50,670 --> 00:02:53,060 Hoffentlich werden sie nicht im Wasser zerfallen. 64 00:02:53,060 --> 00:02:55,560 Wenn wir in einem zweiten Sprite hinzuzufügen, werden wir auch in der Lage sein 65 00:02:55,560 --> 00:02:58,020 Hinzufügen in entsprechenden Skripten zu diesem Sprite. 66 00:02:58,020 --> 00:02:59,580 Und daher werde es eine andere Reihe von sein 67 00:02:59,580 --> 00:03:00,830 Themen das wird laufen. 68 00:03:03,590 --> 00:03:06,270 Um dem Benutzer unseres Programms Kontrolle darüber, wann die 69 00:03:06,270 --> 00:03:09,340 hungrigen Fischen erhält Nahrung, sagen wir, dass, wenn das Space 70 00:03:09,340 --> 00:03:11,840 Bar getroffen wird, erscheinen kitschig puffs auf der Bühne für die 71 00:03:11,840 --> 00:03:13,300 Fisch zu essen. 72 00:03:13,300 --> 00:03:15,760 Bevor wir die Leertaste drücken, wir wollen das kitschig halten 73 00:03:15,760 --> 00:03:19,020 puffs versteckt, so dass die Fische sie nicht sehen können. 74 00:03:19,020 --> 00:03:21,140 Um dies zu tun, werden wir ein paar Skripte für die Notwendigkeit 75 00:03:21,140 --> 00:03:22,750 kitschig puffs Sprite. 76 00:03:22,750 --> 00:03:26,980 Das erste Skript, die grüne Flagge wird nur verstecken die Nahrung. 77 00:03:26,980 --> 00:03:29,530 Im Gegensatz zu den anderen Skripten wir geschrieben haben, wird dies ein nicht halten 78 00:03:29,530 --> 00:03:30,560 läuft immer. 79 00:03:30,560 --> 00:03:33,250 Es beginnt und endet sehr schnell, direkt, wenn wir auf 80 00:03:33,250 --> 00:03:35,000 die grüne Flagge Taste. 81 00:03:35,000 --> 00:03:37,180 >> Das nächste Skript wir haben, warten Sie die Leertaste zu sein 82 00:03:37,180 --> 00:03:39,590 drückte vor der Ausführung. 83 00:03:39,590 --> 00:03:42,770 Wir können das Anklopfen für Benutzereingaben "Warten" oder "hören" 84 00:03:42,770 --> 00:03:43,860 für ein Ereignis. 85 00:03:43,860 --> 00:03:46,750 Und der Code, wenn ein Ereignis oder empfangen wird ausgeführt 86 00:03:46,750 --> 00:03:50,280 gehört, wird als Event-Handling-Code. 87 00:03:50,280 --> 00:03:53,550 Our Space Bar Ereignishandler zeigt die käsigen puffs auf 88 00:03:53,550 --> 00:03:56,330 den Bildschirm so, dass der Fisch essen. 89 00:03:56,330 --> 00:03:58,880 An diesem Punkt hat alles sieht gut aus. 90 00:03:58,880 --> 00:04:00,990 >> Das nächste, was wir tun müssen, ist, um herauszufinden, wie man 91 00:04:00,990 --> 00:04:03,570 die Fische erkennen, dass es zu essen. 92 00:04:03,570 --> 00:04:06,030 Wir fügen einen anderen Thread zu den Fischen, die ständig 93 00:04:06,030 --> 00:04:08,790 prüft, ob es die Berührung der käsigen Züge. 94 00:04:08,790 --> 00:04:11,510 Wir tun dies in einem separaten Thread, da auf diese Weise können wir 95 00:04:11,510 --> 00:04:13,710 ständig für Lebensmittel zu überprüfen. 96 00:04:13,710 --> 00:04:16,829 Ansonsten würden wir nur in der Lage sein, regelmäßig für Lebensmittel zu überprüfen 97 00:04:16,829 --> 00:04:21,180 zwischen Gleiten und drehte sich um, warten, oder denken. 98 00:04:21,180 --> 00:04:22,000 >> OK. 99 00:04:22,000 --> 00:04:23,785 Nun wollen wir laufen unsere Scratch Programm. 100 00:04:23,785 --> 00:04:26,921 Wie erwartet, das Essen sofort versteckt und die 101 00:04:26,921 --> 00:04:28,920 hungrigen Fischen schwimmt hin und her, genau wie vorher. 102 00:04:32,050 --> 00:04:35,060 Wenn wir die Leertaste drücken, kommen die käsigen puffs in Sicht, 103 00:04:35,060 --> 00:04:37,470 und die hungrigen Fischen, sagt whoo. 104 00:04:37,470 --> 00:04:39,340 Aber warten Sie, das ist seltsam. 105 00:04:39,340 --> 00:04:42,150 Wie kommt der Fisch Gedanken unterbricht "Ich bin hungrig" die 106 00:04:42,150 --> 00:04:43,580 anderen Sachen? 107 00:04:43,580 --> 00:04:45,780 Dies ist, weil wir nicht begründet keine Koordination 108 00:04:45,780 --> 00:04:47,590 zwischen den drei Fische Script. 109 00:04:47,590 --> 00:04:50,610 Jedes Zimmer ist in einem eigenen Thread laufen, vergessen, was der 110 00:04:50,610 --> 00:04:52,120 die anderen machen. 111 00:04:52,120 --> 00:04:54,980 Lassen Sie dieses Problem beheben, bevor wir weitermachen. 112 00:04:54,980 --> 00:04:57,700 >> Koordination zwischen Threads ist eine schwierige Aufgabe, da wir 113 00:04:57,700 --> 00:05:00,940 keine explizite Kontrolle über, wenn jeder Thread läuft oder 114 00:05:00,940 --> 00:05:02,190 nicht ausgeführt. 115 00:05:02,190 --> 00:05:04,710 Um eine Nachricht von einem Thread zu einem anderen zu senden, benötigen wir 116 00:05:04,710 --> 00:05:08,300 eine Variable, die wir eingerichtet haben, können oder schreiben zu verwenden, in einem Thread 117 00:05:08,300 --> 00:05:10,170 und in dem anderen gelesen. 118 00:05:10,170 --> 00:05:12,920 Lassen Sie uns eine Variable namens foodFound, dass wir festlegen können 119 00:05:12,920 --> 00:05:15,530 wahr, wenn der Fisch in den käsigen puffs läuft. 120 00:05:15,530 --> 00:05:17,540 Nun, natürlich wollen wir sicherstellen, dass wir es auf 121 00:05:17,540 --> 00:05:19,240 false, zunächst. 122 00:05:19,240 --> 00:05:22,540 Dann, in der Fische Denken Gewinde, werden wir prüfen, ob 123 00:05:22,540 --> 00:05:25,400 der Fisch essen vor der Anzeige des "Ich bin hungrig" gefunden 124 00:05:25,400 --> 00:05:26,770 dachte Blase. 125 00:05:26,770 --> 00:05:29,670 >> Jetzt läuft das Programm wieder sehen wir, dass die Fische 126 00:05:29,670 --> 00:05:31,580 nicht mit dem Gedanken an Hunger unterbrochen zu werden, wenn die 127 00:05:31,580 --> 00:05:33,820 kitschig puffs sind out. 128 00:05:33,820 --> 00:05:36,820 Der letzte Problem, das wir haben, ist, dass die käsigen puffs nicht gehen 129 00:05:36,820 --> 00:05:39,800 weg nach dem Fisch, zitiere unquote, "frisst" sie. 130 00:05:39,800 --> 00:05:42,305 Von den Fischen Script, gibt es keine einfache Möglichkeit, den käsigen verbergen 131 00:05:42,305 --> 00:05:44,710 Puffs, so müssen wir um eine Nachricht an den käsigen puffs senden 132 00:05:44,710 --> 00:05:46,780 Sprite, um sich zu verstecken. 133 00:05:46,780 --> 00:05:49,550 Wir könnten dies mit anderen Variablen zu tun, dass die käsigen puffs 134 00:05:49,550 --> 00:05:52,680 Sprite hat Zugriff auf sowie die Fische Sprite. 135 00:05:52,680 --> 00:05:55,720 >> Allerdings gibt es ein sauberer Weg, dies zu tun in diesem Fall, 136 00:05:55,720 --> 00:05:57,840 da anstelle des Sendens einer Nachricht zu einem Script, das ist in der 137 00:05:57,840 --> 00:06:00,570 irgendwo in der Mitte der Ausführung, können wir die 138 00:06:00,570 --> 00:06:03,710 Nachricht an ein Skript, das darauf wartet, zu starten ist. 139 00:06:03,710 --> 00:06:07,360 Wir tun dies, indem er den Fisch ausgestrahlt ein Ereignis, ein Wir 140 00:06:07,360 --> 00:06:08,800 rufen gegessen. 141 00:06:08,800 --> 00:06:11,510 Dann werden wir ein Skript für den käsigen puffs, die schaffen 142 00:06:11,510 --> 00:06:13,030 Warten für diese Veranstaltung. 143 00:06:13,030 --> 00:06:15,560 Dies ist vergleichbar mit der Leertaste Ereignis, außer dass diese 144 00:06:15,560 --> 00:06:19,250 Mal ist der Benutzer nicht das man direkt das Ereignis auslöst. 145 00:06:19,250 --> 00:06:22,800 Jetzt müssen wir zu tun haben, wird unsere foodFound Variable zurück 146 00:06:22,800 --> 00:06:25,750 auf false, und wir können jetzt geben die hungrigen Fischen wie viele 147 00:06:25,750 --> 00:06:28,470 Portionen kitschig puffs wie er will. 148 00:06:28,470 --> 00:06:30,040 >> So gar nicht so schlecht, oder? 149 00:06:30,040 --> 00:06:33,400 In C, Schreiben von Multi-Threaded-Programme ist komplizierter, 150 00:06:33,400 --> 00:06:35,700 aber die Grundlagen sind die gleichen. 151 00:06:35,700 --> 00:06:38,690 Wie auch immer, ich hoffe, Sie haben eine tolle Zeit bauen etwas Spaß 152 00:06:38,690 --> 00:06:41,030 nebenläufige Programme in Scratch. 153 00:06:41,030 --> 00:06:42,570 Mein Name ist Nate Hardison. 154 00:06:42,570 --> 00:06:45,260 Dies ist CS50.