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