[Powered by Google Translate] Nate Hardison: Keď máš viac programov otvorte na počítač, vyzerá to, že všetko, čo je beží v rovnakom čase. Napríklad, môžete pracovať vo webovom prehliadači, ako Firefox alebo Internet Explorer, počúvanie hudby na iTunes, a esej s aplikáciou. Avšak, pod kapotou, programy skutočne spustiť jeden po druhom. Je to práca na operačnom systéme Windows, Mac OSX, alebo Linux, riadiť každú z týchto jednotlivých procesov, ako programy sú známe, a prepínať medzi nimi tak, že keď prejsť od kontroly Facebook stránku pracovať na svojom eseji znova, Word je ten, ktorý beží. Niekedy, keď chceme programy sami, aby boli schopní robiť viac vecí ako je toto. Ak ste rovnako ako ja, pravdepodobne máte veľa rôzne karty otvoríte vo Vašom webovom prehliadači, jeden pre e-mail, jeden s kalendárom, a tak ďalej. Mohli by sme považovať každú kartu ako samostatný program alebo proces, ako Google Chrome robí, ale mnoho programov používa ľahšia verzia procesu volal vlákno. Závit je len ďalší jednotka spracovanie, sada pokyny alebo kód, ktorý môže "bežať", citácie koniec citátu, súbežne s inými závitmi. To je to, čo umožňuje prechádzať Facebook Pri počúvaní ma v pozadí, alebo mať dva YouTube videá hrať v rovnakom čase. Takže, toto všeobecné témy, známy ako súbežnosť, zvyčajne nepríde tak skoro v kurzoch počítačových vied pretože nižšie úrovne podrobnosti vyžadujú diskusiu operačné systémy a podobne. Avšak, programovací jazyk sa použiť na začiatok CS50, Scratch, poskytuje niektoré šikovný nástroje uľahčujú písať programy s viacerými vecami deje naraz. Pri vytváraní Poznámkovom programy, ste neustále prácu s vláknami. Každý Scratch skript, ktorý je blok kódu, ktorý začína s jeden z "kedy" dielikov, môže byť myšlienka ako samostatné vlákno. Poďme sa pozrieť na jednoduchý Scratch programu vidieť, ako to funguje. Tu, máme rybie objekt, alebo objekt sprite, s dvoma skripty že ako začiatok, keď sme kliknite na malú zelenú vlajku tlačidlo. Prvý skript kontroluje rybí pohyb. Po kliknutí zelená vlajka, dostane umiestnené ryby na ľavej strane obrazovky, tzv fázy, smerom doprava. Potom, v sade inštrukcií, ktoré vám beží navždy, kým zastavenie programu ryby kĺže na pravej strane, otočí, siaha na ľavej strane, a otočí znova. Druhý skript kontroluje rybie myšlienkový proces. Ukazuje sa, že je to hlad ryby. Takže potom, čo čakal po dobu 3 sekúnd, bude ryba myslia, "Mám hlad," pre štvrtina sekundy. Tento skript tiež beží navždy. A ako vidíme, od spustenia programu kliknutím na zelená vlajka, oba skripty zdá spustiť súčasne. Ryba sa pohybuje a myslí v rovnakom čase. Vzhľadom k tomu, chudobní ryba vyzerá tak hlad, poďme pridať niektoré Cheese labutienky pre to jesť. Snáď nebudú rozpadajú vo vode. Keď sa pridá do druhého pohyblivého symbolu, budeme tiež schopní pridať do skriptov, ktoré zodpovedajú danej sprite. A preto, bude tam ďalší súbor nite, ktoré vám beží. Ak chcete dať užívateľovi nášho programu kontroly nad tým, kedy hlad ryby dostane jedlo, povedzme, že kedykoľvek Space Bar je hit, syrové chrumky sa objaví na javisku ryby jesť. Než sa dostaneme na medzerníka, budeme chcieť, aby cheese pusinky schovaná tak, aby ryby nemôžu vidieť. Ak to chcete, budeme potrebovať pár skriptov pre Cheese pusinky sprite. Prvý scenár, zelená vlajka, bude len skryť jedlo. Na rozdiel od iných skriptov sme napísali, bude táto neudrží beží navždy. To bude štart a cieľ veľmi rýchlo, pravdu, keď sme kliknite na tlačidlo zelená vlajka tlačidlo. Ďalšie scenár máme čakať na Space Bar byť stlačené pred prevedením. Môžeme volať čaká na užívateľský vstup "čaká" alebo "počúvanie" pre udalosť. A kódu, ktorý vykonáva pri udalosti prijaté alebo Počul sa nazýva spracovanie udalostí kód. Naša Space Bar rutiny udalosti sa zobrazí gýčovité pusinky na obrazovky tak, aby ryby môžu zjesť. V tomto bode, všetko vyzerá dobre. Ďalšia vec, ktorú musíme urobiť, je zistiť, ako sa dostať ryby si uvedomiť, že je jedlo jesť. Poďme pridať ďalšie vlákno na ryby, ktoré neustále kontroluje, či alebo nie to, ktoré sa dotýkajú gýčovité pusinky. Robíme to v samostatnom vlákne, pretože týmto spôsobom môžeme neustále kontrolovať na jedlo. Inak by sme len mohli pravidelne kontrolovať potraviny medzi plachtenie, otočil, čakal, alebo myslenie. OK. Teraz sa poďme spustiť náš Scratch programu. Ako sa dalo očakávať, jedlo okamžite skryje a hlad ryba pláva sem a tam rovnako ako predtým. Keď sme ťukať do medzerníku, gýčovité pusinky príde do záberu, a hladné ryby hovorí Whoo. Ale počkajte, to je divné. Ako je možné, že rybie "Mám hlad" pomyslel si preruší ďalšie veci? To je preto, že sme nenadviazali žiadny koordináciu medzi tromi rýb skriptov. Každý beží vo vlastnom vlákne, ľahostajný k tomu, čo sa ostatní robia. Poďme tento problém vyriešiť predtým, ako budeme pokračovať. Koordinácia medzi závitmi je obtiažna, pretože sme nemajú explicitné kontrolu nad tým, kedy každé vlákno beží alebo nespustí. Ak chcete poslať správu z jedného vlákna do druhého, budeme potrebovať použiť premennú, ktorá sa môže nastaviť, alebo napísať, v jednom vlákne a čítanie na strane druhej. Poďme vytvoriť premennú s názvom foodFound, že môžeme nastaviť na pravda, keď ryby beží do syrové pusinky. No, samozrejme, chceme sa uistiť, že sme sa vydali do false pôvodne. Potom, v rybom myslenia nití, budeme skontrolujte, či ryby našiel jedlo pred zobrazením "Mám hlad" Myslel bublinu. Teraz, spustenie programu znova, vidíme, že ryby nie je prerušený s myšlienkami hladu, kedy Cheese pusinky sú mimo. Konečný problém, ktorý máme, je, že sa cheese chrumky nejdú preč po rybách, citovať unquote, "žerie" je. Z rýb skriptov, nie je jednoduchý spôsob, ako skryť cheese pusinky, takže musíme poslať správu na gýčovité pusinky sprite k sebe skrývať. Mohli by sme to s inou premennou, že syrové chrumky sprite má prístup k, rovnako ako rybie sprite. Avšak, je tu čistejšie spôsob, ako to je v tomto prípade, pretože namiesto odosielania správy do skriptu, ktorý je niekde uprostred implementácie, môžeme poslať správa skriptu, ktorý ich čaká na štart. Robíme to tým, že ryby vysielanie udalosti, jeden budeme volajte jedol. Potom si vytvoríme skript pre syrové pusinky, ktoré budú čakať na túto akciu. To je podobné udalosti Space Bar, okrem toho, že tento čas, užívateľ to nie je ten priamo vyvolanie udalosti. Teraz všetko, čo musíte urobiť, je nastaviť náš foodFound premennú späť na hodnotu false, a teraz môžeme dať hladnému rybu ako mnoho porcie gýčovité obláčiky, ako to chce. Takže nie je tak zlé, nie? V jazyku C, písanie viacvláknových programov je zložitejšie, ale základy sú rovnaké. Každopádne, dúfam, že budete mať skvelý čas budovanie pobaviť súbežné programy v Scratch. Moje meno je Nate Hardison. To je CS50.