1 00:00:07,360 --> 00:00:09,360 [Powered by Google Translate] Nate Hardison: Keď máš viac programov otvorte na 2 00:00:09,360 --> 00:00:11,250 počítač, vyzerá to, že všetko, čo je 3 00:00:11,250 --> 00:00:12,880 beží v rovnakom čase. 4 00:00:12,880 --> 00:00:15,350 Napríklad, môžete pracovať vo webovom prehliadači, ako 5 00:00:15,350 --> 00:00:19,360 Firefox alebo Internet Explorer, počúvanie hudby na iTunes, 6 00:00:19,360 --> 00:00:21,490 a esej s aplikáciou. 7 00:00:21,490 --> 00:00:24,240 Avšak, pod kapotou, programy skutočne 8 00:00:24,240 --> 00:00:25,830 spustiť jeden po druhom. 9 00:00:25,830 --> 00:00:29,750 Je to práca na operačnom systéme Windows, Mac OSX, alebo 10 00:00:29,750 --> 00:00:33,070 Linux, riadiť každú z týchto jednotlivých procesov, ako 11 00:00:33,070 --> 00:00:35,900 programy sú známe, a prepínať medzi nimi tak, že keď 12 00:00:35,900 --> 00:00:38,610 prejsť od kontroly Facebook stránku pracovať na svojom eseji 13 00:00:38,610 --> 00:00:41,590 znova, Word je ten, ktorý beží. 14 00:00:41,590 --> 00:00:44,890 >> Niekedy, keď chceme programy sami, aby boli schopní 15 00:00:44,890 --> 00:00:47,440 robiť viac vecí ako je toto. 16 00:00:47,440 --> 00:00:49,630 Ak ste rovnako ako ja, pravdepodobne máte veľa 17 00:00:49,630 --> 00:00:52,730 rôzne karty otvoríte vo Vašom webovom prehliadači, jeden pre e-mail, 18 00:00:52,730 --> 00:00:55,070 jeden s kalendárom, a tak ďalej. 19 00:00:55,070 --> 00:00:58,270 Mohli by sme považovať každú kartu ako samostatný program alebo proces, 20 00:00:58,270 --> 00:01:01,300 ako Google Chrome robí, ale mnoho programov používa 21 00:01:01,300 --> 00:01:04,430 ľahšia verzia procesu volal vlákno. 22 00:01:04,430 --> 00:01:07,190 >> Závit je len ďalší jednotka spracovanie, sada 23 00:01:07,190 --> 00:01:10,100 pokyny alebo kód, ktorý môže "bežať", citácie koniec citátu, 24 00:01:10,100 --> 00:01:12,560 súbežne s inými závitmi. 25 00:01:12,560 --> 00:01:15,150 To je to, čo umožňuje prechádzať Facebook 26 00:01:15,150 --> 00:01:17,940 Pri počúvaní ma v pozadí, alebo mať dva 27 00:01:17,940 --> 00:01:20,790 YouTube videá hrať v rovnakom čase. 28 00:01:20,790 --> 00:01:24,660 Takže, toto všeobecné témy, známy ako súbežnosť, zvyčajne 29 00:01:24,660 --> 00:01:26,930 nepríde tak skoro v kurzoch počítačových vied 30 00:01:26,930 --> 00:01:29,790 pretože nižšie úrovne podrobnosti vyžadujú diskusiu 31 00:01:29,790 --> 00:01:31,930 operačné systémy a podobne. 32 00:01:31,930 --> 00:01:34,170 Avšak, programovací jazyk sa použiť na 33 00:01:34,170 --> 00:01:38,000 začiatok CS50, Scratch, poskytuje niektoré šikovný nástroje 34 00:01:38,000 --> 00:01:40,390 uľahčujú písať programy s viacerými vecami 35 00:01:40,390 --> 00:01:42,390 deje naraz. 36 00:01:42,390 --> 00:01:45,050 >> Pri vytváraní Poznámkovom programy, ste neustále 37 00:01:45,050 --> 00:01:46,760 prácu s vláknami. 38 00:01:46,760 --> 00:01:49,770 Každý Scratch skript, ktorý je blok kódu, ktorý začína s 39 00:01:49,770 --> 00:01:52,600 jeden z "kedy" dielikov, môže byť myšlienka 40 00:01:52,600 --> 00:01:54,380 ako samostatné vlákno. 41 00:01:54,380 --> 00:01:58,040 Poďme sa pozrieť na jednoduchý Scratch programu vidieť, ako to funguje. 42 00:01:58,040 --> 00:02:01,730 >> Tu, máme rybie objekt, alebo objekt sprite, s dvoma skripty 43 00:02:01,730 --> 00:02:05,000 že ako začiatok, keď sme kliknite na malú zelenú vlajku tlačidlo. 44 00:02:05,000 --> 00:02:07,290 Prvý skript kontroluje rybí pohyb. 45 00:02:07,290 --> 00:02:09,850 Po kliknutí zelená vlajka, dostane umiestnené ryby 46 00:02:09,850 --> 00:02:12,450 na ľavej strane obrazovky, tzv fázy, 47 00:02:12,450 --> 00:02:14,090 smerom doprava. 48 00:02:14,090 --> 00:02:17,070 Potom, v sade inštrukcií, ktoré vám beží navždy, kým 49 00:02:17,070 --> 00:02:20,270 zastavenie programu ryby kĺže na pravej strane, 50 00:02:20,270 --> 00:02:22,900 otočí, siaha na ľavej strane, a 51 00:02:22,900 --> 00:02:24,470 otočí znova. 52 00:02:24,470 --> 00:02:27,410 Druhý skript kontroluje rybie myšlienkový proces. 53 00:02:27,410 --> 00:02:29,290 Ukazuje sa, že je to hlad ryby. 54 00:02:29,290 --> 00:02:32,080 Takže potom, čo čakal po dobu 3 sekúnd, bude ryba myslia, 55 00:02:32,080 --> 00:02:34,420 "Mám hlad," pre štvrtina sekundy. 56 00:02:34,420 --> 00:02:36,440 Tento skript tiež beží navždy. 57 00:02:36,440 --> 00:02:38,940 A ako vidíme, od spustenia programu kliknutím na 58 00:02:38,940 --> 00:02:41,730 zelená vlajka, oba skripty zdá spustiť 59 00:02:41,730 --> 00:02:43,100 súčasne. 60 00:02:43,100 --> 00:02:46,460 Ryba sa pohybuje a myslí v rovnakom čase. 61 00:02:46,460 --> 00:02:49,030 >> Vzhľadom k tomu, chudobní ryba vyzerá tak hlad, poďme pridať niektoré 62 00:02:49,030 --> 00:02:50,670 Cheese labutienky pre to jesť. 63 00:02:50,670 --> 00:02:53,060 Snáď nebudú rozpadajú vo vode. 64 00:02:53,060 --> 00:02:55,560 Keď sa pridá do druhého pohyblivého symbolu, budeme tiež schopní 65 00:02:55,560 --> 00:02:58,020 pridať do skriptov, ktoré zodpovedajú danej sprite. 66 00:02:58,020 --> 00:02:59,580 A preto, bude tam ďalší súbor 67 00:02:59,580 --> 00:03:00,830 nite, ktoré vám beží. 68 00:03:03,590 --> 00:03:06,270 Ak chcete dať užívateľovi nášho programu kontroly nad tým, kedy 69 00:03:06,270 --> 00:03:09,340 hlad ryby dostane jedlo, povedzme, že kedykoľvek Space 70 00:03:09,340 --> 00:03:11,840 Bar je hit, syrové chrumky sa objaví na javisku 71 00:03:11,840 --> 00:03:13,300 ryby jesť. 72 00:03:13,300 --> 00:03:15,760 Než sa dostaneme na medzerníka, budeme chcieť, aby cheese 73 00:03:15,760 --> 00:03:19,020 pusinky schovaná tak, aby ryby nemôžu vidieť. 74 00:03:19,020 --> 00:03:21,140 Ak to chcete, budeme potrebovať pár skriptov pre 75 00:03:21,140 --> 00:03:22,750 Cheese pusinky sprite. 76 00:03:22,750 --> 00:03:26,980 Prvý scenár, zelená vlajka, bude len skryť jedlo. 77 00:03:26,980 --> 00:03:29,530 Na rozdiel od iných skriptov sme napísali, bude táto neudrží 78 00:03:29,530 --> 00:03:30,560 beží navždy. 79 00:03:30,560 --> 00:03:33,250 To bude štart a cieľ veľmi rýchlo, pravdu, keď sme kliknite na tlačidlo 80 00:03:33,250 --> 00:03:35,000 zelená vlajka tlačidlo. 81 00:03:35,000 --> 00:03:37,180 >> Ďalšie scenár máme čakať na Space Bar byť 82 00:03:37,180 --> 00:03:39,590 stlačené pred prevedením. 83 00:03:39,590 --> 00:03:42,770 Môžeme volať čaká na užívateľský vstup "čaká" alebo "počúvanie" 84 00:03:42,770 --> 00:03:43,860 pre udalosť. 85 00:03:43,860 --> 00:03:46,750 A kódu, ktorý vykonáva pri udalosti prijaté alebo 86 00:03:46,750 --> 00:03:50,280 Počul sa nazýva spracovanie udalostí kód. 87 00:03:50,280 --> 00:03:53,550 Naša Space Bar rutiny udalosti sa zobrazí gýčovité pusinky na 88 00:03:53,550 --> 00:03:56,330 obrazovky tak, aby ryby môžu zjesť. 89 00:03:56,330 --> 00:03:58,880 V tomto bode, všetko vyzerá dobre. 90 00:03:58,880 --> 00:04:00,990 >> Ďalšia vec, ktorú musíme urobiť, je zistiť, ako sa dostať 91 00:04:00,990 --> 00:04:03,570 ryby si uvedomiť, že je jedlo jesť. 92 00:04:03,570 --> 00:04:06,030 Poďme pridať ďalšie vlákno na ryby, ktoré neustále 93 00:04:06,030 --> 00:04:08,790 kontroluje, či alebo nie to, ktoré sa dotýkajú gýčovité pusinky. 94 00:04:08,790 --> 00:04:11,510 Robíme to v samostatnom vlákne, pretože týmto spôsobom môžeme 95 00:04:11,510 --> 00:04:13,710 neustále kontrolovať na jedlo. 96 00:04:13,710 --> 00:04:16,829 Inak by sme len mohli pravidelne kontrolovať potraviny 97 00:04:16,829 --> 00:04:21,180 medzi plachtenie, otočil, čakal, alebo myslenie. 98 00:04:21,180 --> 00:04:22,000 >> OK. 99 00:04:22,000 --> 00:04:23,785 Teraz sa poďme spustiť náš Scratch programu. 100 00:04:23,785 --> 00:04:26,921 Ako sa dalo očakávať, jedlo okamžite skryje a 101 00:04:26,921 --> 00:04:28,920 hlad ryba pláva sem a tam rovnako ako predtým. 102 00:04:32,050 --> 00:04:35,060 Keď sme ťukať do medzerníku, gýčovité pusinky príde do záberu, 103 00:04:35,060 --> 00:04:37,470 a hladné ryby hovorí Whoo. 104 00:04:37,470 --> 00:04:39,340 Ale počkajte, to je divné. 105 00:04:39,340 --> 00:04:42,150 Ako je možné, že rybie "Mám hlad" pomyslel si preruší 106 00:04:42,150 --> 00:04:43,580 ďalšie veci? 107 00:04:43,580 --> 00:04:45,780 To je preto, že sme nenadviazali žiadny koordináciu 108 00:04:45,780 --> 00:04:47,590 medzi tromi rýb skriptov. 109 00:04:47,590 --> 00:04:50,610 Každý beží vo vlastnom vlákne, ľahostajný k tomu, čo sa 110 00:04:50,610 --> 00:04:52,120 ostatní robia. 111 00:04:52,120 --> 00:04:54,980 Poďme tento problém vyriešiť predtým, ako budeme pokračovať. 112 00:04:54,980 --> 00:04:57,700 >> Koordinácia medzi závitmi je obtiažna, pretože sme 113 00:04:57,700 --> 00:05:00,940 nemajú explicitné kontrolu nad tým, kedy každé vlákno beží alebo 114 00:05:00,940 --> 00:05:02,190 nespustí. 115 00:05:02,190 --> 00:05:04,710 Ak chcete poslať správu z jedného vlákna do druhého, budeme potrebovať 116 00:05:04,710 --> 00:05:08,300 použiť premennú, ktorá sa môže nastaviť, alebo napísať, v jednom vlákne 117 00:05:08,300 --> 00:05:10,170 a čítanie na strane druhej. 118 00:05:10,170 --> 00:05:12,920 Poďme vytvoriť premennú s názvom foodFound, že môžeme nastaviť na 119 00:05:12,920 --> 00:05:15,530 pravda, keď ryby beží do syrové pusinky. 120 00:05:15,530 --> 00:05:17,540 No, samozrejme, chceme sa uistiť, že sme sa vydali do 121 00:05:17,540 --> 00:05:19,240 false pôvodne. 122 00:05:19,240 --> 00:05:22,540 Potom, v rybom myslenia nití, budeme skontrolujte, či 123 00:05:22,540 --> 00:05:25,400 ryby našiel jedlo pred zobrazením "Mám hlad" 124 00:05:25,400 --> 00:05:26,770 Myslel bublinu. 125 00:05:26,770 --> 00:05:29,670 >> Teraz, spustenie programu znova, vidíme, že ryby 126 00:05:29,670 --> 00:05:31,580 nie je prerušený s myšlienkami hladu, kedy 127 00:05:31,580 --> 00:05:33,820 Cheese pusinky sú mimo. 128 00:05:33,820 --> 00:05:36,820 Konečný problém, ktorý máme, je, že sa cheese chrumky nejdú 129 00:05:36,820 --> 00:05:39,800 preč po rybách, citovať unquote, "žerie" je. 130 00:05:39,800 --> 00:05:42,305 Z rýb skriptov, nie je jednoduchý spôsob, ako skryť cheese 131 00:05:42,305 --> 00:05:44,710 pusinky, takže musíme poslať správu na gýčovité pusinky 132 00:05:44,710 --> 00:05:46,780 sprite k sebe skrývať. 133 00:05:46,780 --> 00:05:49,550 Mohli by sme to s inou premennou, že syrové chrumky 134 00:05:49,550 --> 00:05:52,680 sprite má prístup k, rovnako ako rybie sprite. 135 00:05:52,680 --> 00:05:55,720 >> Avšak, je tu čistejšie spôsob, ako to je v tomto prípade, 136 00:05:55,720 --> 00:05:57,840 pretože namiesto odosielania správy do skriptu, ktorý je 137 00:05:57,840 --> 00:06:00,570 niekde uprostred implementácie, môžeme poslať 138 00:06:00,570 --> 00:06:03,710 správa skriptu, ktorý ich čaká na štart. 139 00:06:03,710 --> 00:06:07,360 Robíme to tým, že ryby vysielanie udalosti, jeden budeme 140 00:06:07,360 --> 00:06:08,800 volajte jedol. 141 00:06:08,800 --> 00:06:11,510 Potom si vytvoríme skript pre syrové pusinky, ktoré budú 142 00:06:11,510 --> 00:06:13,030 čakať na túto akciu. 143 00:06:13,030 --> 00:06:15,560 To je podobné udalosti Space Bar, okrem toho, že tento 144 00:06:15,560 --> 00:06:19,250 čas, užívateľ to nie je ten priamo vyvolanie udalosti. 145 00:06:19,250 --> 00:06:22,800 Teraz všetko, čo musíte urobiť, je nastaviť náš foodFound premennú späť 146 00:06:22,800 --> 00:06:25,750 na hodnotu false, a teraz môžeme dať hladnému rybu ako mnoho 147 00:06:25,750 --> 00:06:28,470 porcie gýčovité obláčiky, ako to chce. 148 00:06:28,470 --> 00:06:30,040 >> Takže nie je tak zlé, nie? 149 00:06:30,040 --> 00:06:33,400 V jazyku C, písanie viacvláknových programov je zložitejšie, 150 00:06:33,400 --> 00:06:35,700 ale základy sú rovnaké. 151 00:06:35,700 --> 00:06:38,690 Každopádne, dúfam, že budete mať skvelý čas budovanie pobaviť 152 00:06:38,690 --> 00:06:41,030 súbežné programy v Scratch. 153 00:06:41,030 --> 00:06:42,570 Moje meno je Nate Hardison. 154 00:06:42,570 --> 00:06:45,260 To je CS50.