[Powered by Google Translate] NATE Hardison: Když máš více programů otevřete na
počítač, vypadá to, že vše, co je
běží ve stejnou dobu.
Například, můžete pracovat ve webovém prohlížeči, jako
Firefox nebo Internet Explorer, poslech hudby na iTunes,
a esej s aplikací.
Nicméně, pod kapotou, programy skutečně
spustit jeden po druhém.
Je to práce na operačním systému Windows, Mac OSX, nebo
Linux, řídit každou z těchto jednotlivých procesů, jako
programy jsou známé, a přepínat mezi nimi tak, že když
přejít od kontroly Facebook stránku pracovat na svém eseji
znovu, Word je ten, který běží.
>> Někdy, když chceme programy sami, aby byli schopni
dělat více věcí jako je tohle.
Pokud jste stejně jako já, pravděpodobně máte spoustu
různé karty otevřete ve Vašem webovém prohlížeči, jeden pro e-mail,
jeden s kalendářem, a tak dále.
Mohli bychom považovat každou kartu jako samostatný program nebo proces,
jako Google Chrome dělá, ale mnoho programů používá
lehčí verze procesu volal vlákno.
>> Závit je jen další jednotka zpracování, sada
pokyny nebo kód, který může "běžet", citace konec citátu,
souběžně s jinými závity.
To je to, co umožňuje procházet Facebook
Při poslechu mě v pozadí, nebo mít dva
YouTube videa hrát ve stejnou dobu.
Takže, toto obecné téma, známý jako souběžnost, obvykle
nepřijde tak brzy v kurzech počítačových věd
protože nižší úrovně podrobnosti vyžadují diskusi
operační systémy a podobně.
Nicméně, programovací jazyk používáme na
začátek CS50, Scratch, poskytuje některé šikovný nástroje
usnadňují psát programy s více věcmi
děje najednou.
>> Při vytváření Poznámkovém programy, jste neustále
práci s vlákny.
Každý Scratch skript, který je blok kódu, který začíná s
jeden z "kdy" dílků, může být myšlenka
jako samostatné vlákno.
Pojďme se podívat na jednoduchý Scratch programu vidět, jak to funguje.
>> Zde, máme rybí objekt, nebo objekt sprite, se dvěma skripty
že jak začátek, když jsme klepněte na malou zelenou vlajku tlačítko.
První skript kontroluje rybí pohyb.
Po klepnutí zelená vlajka, dostane umístěny ryby
na levé straně obrazovky, tzv. fáze,
směrem doprava.
Pak, v sadě instrukcí, které vám běží navždy, dokud
zastavení programu ryby klouže na pravé straně,
otočí, sahá na levé straně, a
otočí znovu.
Druhý skript kontroluje rybí myšlenkový proces.
Ukazuje se, že je to hlad ryby.
Takže poté, co čekal po dobu 3 sekund, bude ryba myslí,
"Mám hlad," pro čtvrté sekundy.
Tento skript také běží navždy.
A jak vidíme, od spuštění programu klepnutím na
zelená vlajka, oba skripty zdá spustit
současně.
Ryba se pohybuje a myslí ve stejnou dobu.
>> Vzhledem k tomu, chudé ryba vypadá tak hlad, pojďme přidat některé
cheesy labutěnky pro to jíst.
Snad nebudou rozpadají ve vodě.
Když se přidá do druhého pohyblivého symbolu, budeme také schopni
přidat do skriptů, které odpovídají dané sprite.
A proto, bude tam další soubor
nitě, které vám běží.
Chcete-li dát uživateli našeho programu kontroly nad když
hlad ryby dostane jídlo, řekněme, že pokud Space
Bar je hit, sýrové křupky se objeví na jevišti pro
ryby jíst.
Než se dostaneme na mezerníku, budeme chtít udržet cheesy
pusinky schovaná tak, aby ryby nemohou vidět.
Chcete-li to provést, budeme potřebovat pár skriptů pro
cheesy pusinky sprite.
První skript, zelená vlajka, bude jen skrýt jídlo.
Na rozdíl od jiných skriptů jsme napsali, bude tato neudrží
běží navždy.
To bude start a cíl velmi rychle, pravdu, když jsme klepněte na tlačítko
zelená vlajka tlačítko.
>> Další scénář máme čekat na Space Bar být
stisknuto před provedením.
Můžeme volat čeká na uživatelský vstup "čeká" nebo "poslech"
pro událost.
A kód, který provádí při události přijaté nebo
Slyšel se nazývá zpracování událostí kód.
Naše Space Bar rutiny události se zobrazí kýčovité pusinky na
obrazovky tak, aby ryby mohou sníst.
V tomto bodě, všechno vypadá dobře.
>> Další věc, kterou musíme udělat, je zjistit, jak se dostat
ryby si uvědomit, že je jídlo jíst.
Pojďme přidat další vlákno na ryby, které neustále
kontroluje, zda nebo ne to, které se dotýkají kýčovité pusinky.
Děláme to v samostatném vlákně, protože tímto způsobem můžeme
neustále kontrolovat na jídlo.
Jinak bychom jen mohli pravidelně kontrolovat potraviny
mezi plachtění, otočil, čekal, nebo myšlení.
>> OK.
Nyní se pojďme spustit náš Scratch programu.
Jak se dalo očekávat, jídlo okamžitě skryje a
hlad ryba plave sem a tam stejně jako předtím.
Když jsme ťukat do mezerníku, kýčovité pusinky přijde do záběru,
a hladové ryby říká Whoo.
Ale počkejte, to je divné.
Jak to, že se rybí "Mám hlad" pomyslel si přeruší
další věci?
To je proto, že jsme nenavázali žádný koordinaci
mezi třemi ryb skriptů.
Každý běží ve vlastním vláknu, lhostejný k tomu, co se
ostatní dělají.
Pojďme tento problém vyřešit předtím, než budeme pokračovat.
>> Koordinace mezi závity je obtížná, protože jsme
nemají explicitní kontrolu nad tím, kdy každé vlákno běží nebo
nespustí.
Chcete-li poslat zprávu z jednoho podprocesu do druhého, budeme potřebovat
použít proměnnou, která se může nastavit, nebo napsat, v jednom vlákně
a čtení na straně druhé.
Pojďme vytvořit proměnnou s názvem foodFound, že můžeme nastavit na
pravda, když ryby běží do sýrové pusinky.
No, samozřejmě, chceme se ujistit, že jsme se vydali do
false původně.
Pak, v rybím myšlení nití, budeme zkontrolujte, zda
ryby našel jídlo před zobrazením "Mám hlad"
Myslel bublinu.
>> Nyní, spuštění programu znovu, vidíme, že ryby
není přerušen s myšlenkami hladu, kdy
cheesy pusinky jsou mimo.
Konečný problém, který máme, je, že se cheesy křupky nejdou
pryč po rybách, citovat unquote, "žere" je.
Z ryb skriptů, není snadný způsob, jak skrýt cheesy
pusinky, takže musíme poslat zprávu na kýčovité pusinky
sprite k sobě skrývat.
Mohli bychom to s jinou proměnnou, že sýrové křupky
sprite má přístup k, stejně jako rybí sprite.
>> Nicméně, je tu čistší způsob, jak to je v tomto případě,
protože namísto odesílání zprávy do skriptu, který je
někde uprostřed provádění, můžeme poslat
zpráva skriptu, který je čeká na start.
Děláme to tím, že ryby vysílání události, jeden budeme
volejte jedl.
Pak si vytvoříme skript pro sýrové pusinky, které budou
čekat na tuto akci.
To je podobné události Space Bar, kromě toho, že tento
čas, uživatel to není ten přímo vyvolání události.
Nyní vše, co musíte udělat, je nastavit náš foodFound proměnnou zpět
na hodnotu false, a nyní můžeme dát hladovému rybu jako mnoho
porce kýčovité obláčky, jak to chce.
>> Takže není tak špatné, ne?
V jazyce C, psaní vícevláknových programů je složitější,
ale základy jsou stejné.
Každopádně, doufám, že budete mít skvělý čas budování pobavit
souběžné programy v Scratch.
Mé jméno je Nate Hardison.
To je CS50.