Tip:
Highlight text to annotate it
X
[Powered by Google Translate] Nate HARDISON: Wakati nimepata programu mbalimbali juu ya kufungua
kompyuta, inaonekana kama kila kitu cha
mbio kwa wakati mmoja.
Kwa mfano, unaweza kuwa kazi katika kivinjari kama
Firefox au Internet Explorer, kusikiliza muziki kwenye iTunes,
na kuandika insha kwa Neno.
Hata hivyo, chini ya Hood, mipango kweli
kukimbia moja kwa wakati mmoja.
Ni kazi ya mfumo wa uendeshaji, Windows, Mac OSX, au
Linux, kusimamia kila moja ya taratibu hizi tofauti, kama
mipango zinajulikana, na kubadili kati yao hivyo kwamba wakati wewe
kwenda kutoka kuangalia yako Facebook ukurasa kwa kazi ya insha yako
tena, Neno ni moja kwamba mbio.
>> Wakati mwingine, ingawa, tunataka programu wenyewe kuwa na uwezo
kufanya mambo mbalimbali kama hii, pia.
Kama wewe ni kama mimi, wewe pengine kuwa na rundo la
tabo mbalimbali wazi katika browser mtandao wako, moja kwa barua pepe,
moja na kalenda, na kadhalika.
Tunaweza kutibu kila tab kama mpango tofauti au mchakato,
kama Google Chrome gani, lakini mipango mingi kutumia
nyepesi-uzito version ya mchakato kuitwa thread.
>> thread ni mwingine tu kitengo cha usindikaji, seti ya
maelekezo au kificho kwamba anaweza "kukimbia", quote unquote,
Sanjari na threads nyingine.
Hii ni nini hufanya hivyo inawezekana kwa wewe browse Facebook
wakati kusikiliza yangu katika background au kuwa na wawili
YouTube videos kucheza kwa wakati mmoja.
Hivyo, mada hii kwa ujumla, anajulikana kama concurrency, kawaida
haina kuja mapema katika sayansi ya kompyuta kozi
kwa sababu maelezo ya chini ya ngazi zinahitaji mjadala wa
mifumo ya uendeshaji na kama.
Hata hivyo, lugha ya programu sisi kutumia katika
mwanzo wa CS50, Scratch, hutoa baadhi ya zana nifty kwa
iwe rahisi kuandika mipango na mambo mbalimbali
kinachoendelea kwa mara moja.
>> Wakati kujenga mipango Scratch, uko daima
kufanya kazi na threads.
Kila script Scratch, ambayo ni ya kuzuia kificho kwamba huanza na
moja ya "wakati" vipande puzzle, wanaweza kuwa na mawazo ya
kama thread tofauti.
Hebu tuangalie mpango rahisi Scratch kuona jinsi hii matendo.
>> Hapa, sisi tumepewa kitu samaki, au Sprite, kwa scripts mbili
kwamba wote kuanza wakati sisi bonyeza kidogo kijani bendera button.
script kwanza udhibiti mwendo wa samaki.
Wakati bendera ya kijani ni clicked, samaki anapata kuwekwa
upande wa kushoto wa screen, aitwaye hatua,
inakabiliwa na haki.
Kisha, katika seti ya maelekezo ya kwamba utakuwa kukimbia milele, mpaka sisi
kuacha mpango, samaki glides kwa upande wa kulia,
anarudi kuzunguka, inakwenda nyuma upande wa kushoto, na
anarudi karibu tena.
script pili udhibiti mawazo samaki wa mchakato.
Ni zinageuka kuwa hii ni samaki njaa.
Hivyo baada ya kusubiri kwa sekunde 3, samaki kufikiri,
"Mimi nina njaa," kwa ajili ya pili ya nne.
Script Hii pia anaendesha milele.
Na kama sisi kuona, kutoka mbio mpango kwa kubonyeza
kijani bendera, wote scripts itaonekana kutekeleza
wakati huo huo.
samaki moves na anadhani kwa wakati mmoja.
>> Tangu samaki maskini inaonekana hivyo njaa, hebu kuongeza katika baadhi
cheesy pumzi kwa ajili yake kula.
Hopefully wao si disintegrate katika maji.
Wakati sisi kuongeza katika Sprite pili, tutaweza pia kuwa na uwezo wa
kuongeza katika scripts sambamba na sprite hiyo.
Na hivyo, kutakuwa na kuweka mwingine wa
threads kwamba kutakuwa na kukimbia.
Ili kutoa user ya mpango wa kudhibiti wetu juu ya wakati
samaki njaa anapata chakula, hebu kusema kwamba wakati wowote Space
Bar ni hit, pumzi cheesy itaonekana juu ya hatua kwa
samaki wa kula.
Kabla ya sisi hit Bar Space, tutaweza wanataka kushika cheesy
pumzi siri ili samaki hawawezi kuona kwao.
Ili kufanya hivyo, tutaweza haja ya wanandoa wa scripts kwa
cheesy pumzi sprite.
script kwanza, bendera ya kijani, itakuwa tu ya kuficha chakula.
Tofauti na scripts nyingine tumekuwa imeandikwa, hii si kuweka
mbio milele.
Itakuwa kuanza na kumaliza haraka sana, kulia wakati sisi bonyeza
kijani bendera button.
>> script ijayo tuna kusubiri kwa Bar Space kuwa
taabu kabla ya utekelezaji.
Tunaweza kuwaita kusubiri kwa pembejeo user "kusubiri" au "kusikiliza"
kwa tukio hilo.
Na kificho kwamba executes wakati tukio ni kupokea au
aliposikia inaitwa tukio utunzaji code.
Nafasi yetu Bar tukio handler itaonyesha pumzi cheesy juu ya
screen ili samaki wanaweza kula yao.
Katika hatua hii, kila kitu ni kuangalia nzuri.
>> Kilichofuata tunahitaji kufanya ni kufikiri jinsi ya kupata
samaki kwa kutambua kwamba kuna chakula cha kula.
Hebu kuongeza thread nyingine kwa samaki kwamba daima
hundi kama au ni kugusa pumzi cheesy.
Sisi kufanya hili katika thread tofauti tangu kwamba njia tunaweza
daima kuangalia kwa ajili ya chakula.
Vinginevyo, tunatarajia tu kuwa na uwezo wa mara kwa mara kuangalia kwa chakula
katika kati ya gliding akageuka, kusubiri, au kufikiri.
>> OK.
Sasa hebu kukimbia Scratch mpango wetu.
Kama ilivyotarajiwa, chakula mara moja ngozi na
samaki njaa swims na kurudi tu kama kabla.
Wakati sisi hit Bar Space, pumzi cheesy kuja katika mtazamo,
na samaki njaa anasema whoo.
Lakini kusubiri, hiyo ni weird.
Jinsi ya kuja samaki wa "mimi nina njaa" mawazo interrupts
mambo mengine?
Hii ni kwa sababu hatukuwa kuanzisha yoyote uratibu
kati ya tatu samaki scripts.
Kila mbio katika thread yake mwenyewe, oblivious kwa nini
wengine ni kufanya.
Hebu kurekebisha hii kabla ya sisi kuondoka.
>> Uratibu kati ya nyuzi ni jukumu gumu tangu sisi
hawana udhibiti dhahiri zaidi wakati kila thread anaendesha au
haina kukimbia.
Ili kutuma ujumbe kutoka thread moja hadi nyingine, sisi itabidi
kutumia variable kwamba tunaweza kuweka, au kuandika, katika thread moja
na kusoma katika nyingine.
Hebu kujenga variable kuitwa foodFound kwamba tunaweza kuweka
kweli wakati samaki anaendesha ndani pumzi cheesy.
Naam, bila shaka, tunataka kuhakikisha kwamba sisi kuweka kwa
uongo awali.
Kisha, katika kufikiri thread ya samaki, tutaweza kuangalia kuona kama
samaki kimepata chakula kabla ya kuonyesha "Mimi nina njaa"
walidhani Bubble.
>> Sasa, mbio mpango tena, tunaona kwamba samaki
haina kupata kuingiliwa na mawazo ya njaa wakati
pumzi cheesy ni nje.
Tatizo la mwisho ni kwamba tuna pumzi cheesy hawaendi
mbali baada ya samaki, quote unquote, "anakula" yao.
Kutoka scripts samaki, hakuna njia rahisi kuficha cheesy
pumzi, hivyo tunahitaji kutuma ujumbe kwa pumzi cheesy
sprite kuficha yenyewe.
Tunaweza kufanya hili kwa variable mwingine kwamba pumzi cheesy
sprite ina kupata, kama vile sprite samaki.
>> Hata hivyo, kuna njia safi ya kufanya hivyo katika kesi hii,
tangu badala ya kutuma ujumbe kwa script kwamba
mahali fulani katikati ya utekelezaji, tunaweza kutuma
ujumbe kwa script kwamba anasubiri kuanza.
Sisi kufanya hivyo kwa kuwa samaki kutangaza tukio, mmoja tutaweza
piga kuliwa.
Kisha, tutaweza kujenga script kwa pumzi cheesy kwamba mapenzi
kusubiri kwa ajili ya tukio hili.
Hii ni sawa na tukio Bar Space, isipokuwa kwamba hii
muda, mtumiaji si moja kwa moja kuchochea tukio hilo.
Sasa wote tunahitaji kufanya ni kuweka variable yetu nyuma foodFound
kwa uongo, na sasa tunaweza kutoa samaki njaa kama wengi
resheni ya pumzi cheesy kama anataka.
>> Hivyo si mbaya sana, sawa?
Katika C, kuandika mipango mbalimbali Threaded ni ngumu zaidi,
lakini misingi ni sawa.
Anyway, Natumaini una muda kubwa kujenga baadhi ya furaha
concurrent mipango katika Scratch.
Jina langu ni Nate Hardison.
Hii ni CS50.