[Powered by Google Translate] Nate HARDISON: As jy het verskeie programme op 'n oop
rekenaar, dit lyk asof alles is
loop op dieselfde tyd.
Byvoorbeeld, kan jy werk in 'n webblaaier, soos
Firefox of Internet Explorer, luister na musiek op iTunes,
en die skryf van 'n opstel met die Woord.
Egter onder die kap, die programme eintlik
hardloop een op 'n tyd.
Dit is die taak van die bedryfstelsel, Windows, Mac OSX, of
Linux, aan elk van hierdie afsonderlike prosesse bestuur, as die
programme is bekend, en skakel tussen hulle so dat wanneer jy
gaan van die kontrolering van jou Facebook-bladsy om saam te werk op jou opstel
weer, die Woord is die een wat loop.
>> Soms, al is, wil ons programme om hulself te in staat wees om
verskeie dinge te doen soos dit ook.
As jy soos ek is, het jy waarskynlik 'n klomp van die
verskillende oortjies oopmaak in jou webblaaier, een vir e-pos,
een met 'n kalender, en so aan.
Ons kan elke blad behandel as 'n aparte program of proses,
soos Google Chrome doen nie, maar baie programme gebruik 'n
ligter gewig weergawe van 'n proses bekend as 'n draad.
>> 'N draad is net nog 'n eenheid van die verwerking, 'n stel
instruksies of kode wat kan "loop", quote unquote,
gelyktydig met ander drade.
Dit is wat dit vir jou moontlik Facebook te blaai
terwyl jy luister na my in die agtergrond of twee
YouTube-video's te speel op dieselfde tyd.
So, hierdie algemene onderwerp, bekend as die gelyktydigheid, tipies
kom nie so vroeg in die rekenaar wetenskap kursusse
omdat die laer vlak besonderhede vereis bespreking van
bedryfstelsels en dies meer.
Egter die programmeertaal wat ons gebruik by die
die begin van die CS50, Kras, bied 'n paar nifty gereedskap
Maak dit makliker om programme te kan skryf met verskeie dinge
gaan op 'n keer.
>> Wanneer jy bou Scratch programme, jy voortdurend
werk met drade.
Elke Scratch script, wat is 'n kode blok wat begin met
een van die "wanneer" legkaart stukkies, kan gedink
as 'n aparte draad.
Kom ons kyk na 'n eenvoudige Scratch program om te sien hoe dit werk.
>> Hier het ons het 'n vis voorwerp, of sprite, met twee skrifte
dat beide begin wanneer ons kliek op die bietjie groen vlag "knoppie.
Die eerste skrif, die vis se beweging beheer.
Wanneer die groen vlag geklik word, raak die vis geplaas
aan die linkerkant van die skerm, die stadium genoem,
die gesig staar aan die regterkant.
Dan, in 'n stel instruksies wat vir ewig sal loop, totdat ons
stop die program, die vis gly aan die regterkant,
draai om, gaan terug na die linkerkant, en
draai al weer rond.
Die tweede script beheer die vis se denkproses.
Dit blyk dat dit is 'n honger vis.
So nadat wag vir 3 sekondes, sal die vis dink,
"Ek is honger," vir 1/4 sekonde.
Dit script loop ook vir ewig.
En as ons sien, uit die loop van die program deur te kliek op die
groen vlag, beide skrifte verskyn om uit te voer
gelyktydig.
Die vis beweeg en op dieselfde tyd dink.
>> Sedert die arme vis lyk so honger, laat ons voeg in sommige
Wink poffertjies vir dit om te eet.
Hopelik sal hulle nie disintegreer in die water nie.
Wanneer ons in 'n tweede sprite, sal ons ook in staat wees om
voeg in die skrifte wat ooreenstem met wat sprite.
En dus sal daar 'n ander stel van
drade wat sal loop.
Gee aan die gebruiker van ons program beheer oor wanneer die
honger vis kry kos, laat ons sê dat wanneer die Ruimte
Bar getref, Wink poffertjies op die verhoog verskyn, vir die
vis te eet.
Voordat ons druk die space bar, sal ons wil die irriterende te hou
poffertjies weggesteek sodat die vis nie kan sien nie.
Dit te doen, sal ons 'n paar skrifte nodig het vir die
Wink poffertjies sprite.
Die eerste skrif, die groen vlag, sal net die kos verberg.
In teenstelling met die ander skrifte wat ons het geskryf, sal hierdie een hou nie
hardloop vir ewig.
Dit sal baie vinnig begin en eindig, reg wanneer ons kliek
die groen vlag knoppie.
>> Die volgende script wat ons het sal wag vir die spasie balk om
gedruk voor die uitvoering.
Ons kan bel wag vir toevoer van die gebruiker "wag" of "luister"
vir 'n gebeurtenis.
En die kode wat voer wanneer 'n gebeurtenis of ontvang
gehoor word genoem gebeurtenis hantering kode.
Ons Space Bar event handler sal toon die Wink poffertjies op
die skerm sodat die vis kan eet.
Op hierdie punt, alles lyk goed.
>> Die volgende ding wat ons nodig het om te doen, is om uit te vind hoe om te kry
die vis om te besef dat daar kos is om te eet.
Kom ons voeg 'n ander draad aan die visse wat voortdurend
tjeks of dit die Wink poffertjies raak.
Ons doen dit in 'n aparte draad sedert dié manier kan ons
voortdurend te monitor om te eet.
Anders, ons wil net in staat wees om van tyd tot tyd te kyk vir kos
tussen sweef, om om te draai, wag, of dink.
>> OK.
Nou laat ons loop ons Scratch program.
Soos verwag, het die kos onmiddellik verberg en die
honger vis swem heen en weer net voor hou.
Wanneer ons druk die space bar, die Wink poffertjies kom in die oog,
en die honger vis sê Whoo.
Maar wag, dit is weird.
Hoe kom die vis se "Ek is honger" gedagte onderbreek die
ander dinge?
Dit is omdat ons nie enige koördinasie vestig
tussen die drie vis skrifte.
Elkeen is in sy eie draad aan die gang, salig onbewus van wat die
ander doen.
Laat ons hierdie probleem oplos voor ons aanbeweeg.
>> Koördinasie tussen drade is 'n moeilike taak, aangesien ons
het nie uitdruklike beheer oor wanneer elke draad loop of
nie uitvoer nie.
Om 'n boodskap te stuur van een draad na 'n ander, moet ons
'n veranderlike te gebruik, dat ons kan stel, of skryf, in een draad
en lees in die ander.
Kom ons skep 'n veranderlike genoem foodFound dat ons kan stel
waar wanneer die vis loop in die Wink poffertjies.
Wel, natuurlik, wil ons seker maak dat ons dit
vals aanvanklik.
Dan sal ons in die vis se denke draad, kyk om te sien as
die vis gevind maaltyd voor die vertoning van die "Ek is honger"
gedink borrel.
>> Nou, hardloop die program weer, sien ons dat die vis
nie met gedagtes van die honger onderbreek wanneer die
Wink poffertjies is.
Die laaste probleem wat ons het, is dat die Wink poffertjies gaan nie
weg na die vis, haal unquote, "eet".
Van die vis skrifte, daar is geen maklike manier om die irriterende om weg te steek
poffertjies, sodat ons nodig het om 'n boodskap te stuur na die Wink poffertjies
sprite self om weg te steek.
Ons kan dit doen met 'n ander veranderlike dat die Wink poffertjies
sprite het toegang tot, sowel as die vis sprite.
>> Daar is egter 'n skoner manier om dit te doen in hierdie geval,
want in plaas van die stuur van 'n boodskap aan 'n script wat is
iewers in die middel van die uitvoering, kan ons die
boodskap aan 'n script wat wag om te begin.
Ons doen dit deur met die vis uitgesaai 'n gebeurtenis, een wat ons sal
noem dit geëet word.
Dan, sal ons 'n script te skep vir die Wink poffertjies wat
wag vir hierdie gebeurtenis.
Dit is soortgelyk aan die space bar gebeurtenis, behalwe dat hierdie
tyd, die gebruiker is nie die een wat direk verwek die gebeurtenis.
Nou al wat ons hoef te doen is ons foodFound veranderlike terug
ONWAAR is, en ons kan nou die honger vis soveel
porsies Wink proes soos dit wil.
>> So nie te sleg nie, reg?
In C, multi-threaded programme te skryf is meer ingewikkeld,
maar die basiese beginsels is dieselfde.
In elk geval, ek hoop jy het 'n goeie tyd om die bou van 'n paar pret
konkurrente programme in Scratch.
My naam is Nate Hardison.
Dit is CS50.