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