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