1 00:00:07,360 --> 00:00:09,360 [Powered by Google Translate] Nate HARDISON: As jy het verskeie programme op 'n oop 2 00:00:09,360 --> 00:00:11,250 rekenaar, dit lyk asof alles is 3 00:00:11,250 --> 00:00:12,880 loop op dieselfde tyd. 4 00:00:12,880 --> 00:00:15,350 Byvoorbeeld, kan jy werk in 'n webblaaier, soos 5 00:00:15,350 --> 00:00:19,360 Firefox of Internet Explorer, luister na musiek op iTunes, 6 00:00:19,360 --> 00:00:21,490 en die skryf van 'n opstel met die Woord. 7 00:00:21,490 --> 00:00:24,240 Egter onder die kap, die programme eintlik 8 00:00:24,240 --> 00:00:25,830 hardloop een op 'n tyd. 9 00:00:25,830 --> 00:00:29,750 Dit is die taak van die bedryfstelsel, Windows, Mac OSX, of 10 00:00:29,750 --> 00:00:33,070 Linux, aan elk van hierdie afsonderlike prosesse bestuur, as die 11 00:00:33,070 --> 00:00:35,900 programme is bekend, en skakel tussen hulle so dat wanneer jy 12 00:00:35,900 --> 00:00:38,610 gaan van die kontrolering van jou Facebook-bladsy om saam te werk op jou opstel 13 00:00:38,610 --> 00:00:41,590 weer, die Woord is die een wat loop. 14 00:00:41,590 --> 00:00:44,890 >> Soms, al is, wil ons programme om hulself te in staat wees om 15 00:00:44,890 --> 00:00:47,440 verskeie dinge te doen soos dit ook. 16 00:00:47,440 --> 00:00:49,630 As jy soos ek is, het jy waarskynlik 'n klomp van die 17 00:00:49,630 --> 00:00:52,730 verskillende oortjies oopmaak in jou webblaaier, een vir e-pos, 18 00:00:52,730 --> 00:00:55,070 een met 'n kalender, en so aan. 19 00:00:55,070 --> 00:00:58,270 Ons kan elke blad behandel as 'n aparte program of proses, 20 00:00:58,270 --> 00:01:01,300 soos Google Chrome doen nie, maar baie programme gebruik 'n 21 00:01:01,300 --> 00:01:04,430 ligter gewig weergawe van 'n proses bekend as 'n draad. 22 00:01:04,430 --> 00:01:07,190 >> 'N draad is net nog 'n eenheid van die verwerking, 'n stel 23 00:01:07,190 --> 00:01:10,100 instruksies of kode wat kan "loop", quote unquote, 24 00:01:10,100 --> 00:01:12,560 gelyktydig met ander drade. 25 00:01:12,560 --> 00:01:15,150 Dit is wat dit vir jou moontlik Facebook te blaai 26 00:01:15,150 --> 00:01:17,940 terwyl jy luister na my in die agtergrond of twee 27 00:01:17,940 --> 00:01:20,790 YouTube-video's te speel op dieselfde tyd. 28 00:01:20,790 --> 00:01:24,660 So, hierdie algemene onderwerp, bekend as die gelyktydigheid, tipies 29 00:01:24,660 --> 00:01:26,930 kom nie so vroeg in die rekenaar wetenskap kursusse 30 00:01:26,930 --> 00:01:29,790 omdat die laer vlak besonderhede vereis bespreking van 31 00:01:29,790 --> 00:01:31,930 bedryfstelsels en dies meer. 32 00:01:31,930 --> 00:01:34,170 Egter die programmeertaal wat ons gebruik by die 33 00:01:34,170 --> 00:01:38,000 die begin van die CS50, Kras, bied 'n paar nifty gereedskap 34 00:01:38,000 --> 00:01:40,390 Maak dit makliker om programme te kan skryf met verskeie dinge 35 00:01:40,390 --> 00:01:42,390 gaan op 'n keer. 36 00:01:42,390 --> 00:01:45,050 >> Wanneer jy bou Scratch programme, jy voortdurend 37 00:01:45,050 --> 00:01:46,760 werk met drade. 38 00:01:46,760 --> 00:01:49,770 Elke Scratch script, wat is 'n kode blok wat begin met 39 00:01:49,770 --> 00:01:52,600 een van die "wanneer" legkaart stukkies, kan gedink 40 00:01:52,600 --> 00:01:54,380 as 'n aparte draad. 41 00:01:54,380 --> 00:01:58,040 Kom ons kyk na 'n eenvoudige Scratch program om te sien hoe dit werk. 42 00:01:58,040 --> 00:02:01,730 >> Hier het ons het 'n vis voorwerp, of sprite, met twee skrifte 43 00:02:01,730 --> 00:02:05,000 dat beide begin wanneer ons kliek op die bietjie groen vlag "knoppie. 44 00:02:05,000 --> 00:02:07,290 Die eerste skrif, die vis se beweging beheer. 45 00:02:07,290 --> 00:02:09,850 Wanneer die groen vlag geklik word, raak die vis geplaas 46 00:02:09,850 --> 00:02:12,450 aan die linkerkant van die skerm, die stadium genoem, 47 00:02:12,450 --> 00:02:14,090 die gesig staar aan die regterkant. 48 00:02:14,090 --> 00:02:17,070 Dan, in 'n stel instruksies wat vir ewig sal loop, totdat ons 49 00:02:17,070 --> 00:02:20,270 stop die program, die vis gly aan die regterkant, 50 00:02:20,270 --> 00:02:22,900 draai om, gaan terug na die linkerkant, en 51 00:02:22,900 --> 00:02:24,470 draai al weer rond. 52 00:02:24,470 --> 00:02:27,410 Die tweede script beheer die vis se denkproses. 53 00:02:27,410 --> 00:02:29,290 Dit blyk dat dit is 'n honger vis. 54 00:02:29,290 --> 00:02:32,080 So nadat wag vir 3 sekondes, sal die vis dink, 55 00:02:32,080 --> 00:02:34,420 "Ek is honger," vir 1/4 sekonde. 56 00:02:34,420 --> 00:02:36,440 Dit script loop ook vir ewig. 57 00:02:36,440 --> 00:02:38,940 En as ons sien, uit die loop van die program deur te kliek op die 58 00:02:38,940 --> 00:02:41,730 groen vlag, beide skrifte verskyn om uit te voer 59 00:02:41,730 --> 00:02:43,100 gelyktydig. 60 00:02:43,100 --> 00:02:46,460 Die vis beweeg en op dieselfde tyd dink. 61 00:02:46,460 --> 00:02:49,030 >> Sedert die arme vis lyk so honger, laat ons voeg in sommige 62 00:02:49,030 --> 00:02:50,670 Wink poffertjies vir dit om te eet. 63 00:02:50,670 --> 00:02:53,060 Hopelik sal hulle nie disintegreer in die water nie. 64 00:02:53,060 --> 00:02:55,560 Wanneer ons in 'n tweede sprite, sal ons ook in staat wees om 65 00:02:55,560 --> 00:02:58,020 voeg in die skrifte wat ooreenstem met wat sprite. 66 00:02:58,020 --> 00:02:59,580 En dus sal daar 'n ander stel van 67 00:02:59,580 --> 00:03:00,830 drade wat sal loop. 68 00:03:03,590 --> 00:03:06,270 Gee aan die gebruiker van ons program beheer oor wanneer die 69 00:03:06,270 --> 00:03:09,340 honger vis kry kos, laat ons sê dat wanneer die Ruimte 70 00:03:09,340 --> 00:03:11,840 Bar getref, Wink poffertjies op die verhoog verskyn, vir die 71 00:03:11,840 --> 00:03:13,300 vis te eet. 72 00:03:13,300 --> 00:03:15,760 Voordat ons druk die space bar, sal ons wil die irriterende te hou 73 00:03:15,760 --> 00:03:19,020 poffertjies weggesteek sodat die vis nie kan sien nie. 74 00:03:19,020 --> 00:03:21,140 Dit te doen, sal ons 'n paar skrifte nodig het vir die 75 00:03:21,140 --> 00:03:22,750 Wink poffertjies sprite. 76 00:03:22,750 --> 00:03:26,980 Die eerste skrif, die groen vlag, sal net die kos verberg. 77 00:03:26,980 --> 00:03:29,530 In teenstelling met die ander skrifte wat ons het geskryf, sal hierdie een hou nie 78 00:03:29,530 --> 00:03:30,560 hardloop vir ewig. 79 00:03:30,560 --> 00:03:33,250 Dit sal baie vinnig begin en eindig, reg wanneer ons kliek 80 00:03:33,250 --> 00:03:35,000 die groen vlag knoppie. 81 00:03:35,000 --> 00:03:37,180 >> Die volgende script wat ons het sal wag vir die spasie balk om 82 00:03:37,180 --> 00:03:39,590 gedruk voor die uitvoering. 83 00:03:39,590 --> 00:03:42,770 Ons kan bel wag vir toevoer van die gebruiker "wag" of "luister" 84 00:03:42,770 --> 00:03:43,860 vir 'n gebeurtenis. 85 00:03:43,860 --> 00:03:46,750 En die kode wat voer wanneer 'n gebeurtenis of ontvang 86 00:03:46,750 --> 00:03:50,280 gehoor word genoem gebeurtenis hantering kode. 87 00:03:50,280 --> 00:03:53,550 Ons Space Bar event handler sal toon die Wink poffertjies op 88 00:03:53,550 --> 00:03:56,330 die skerm sodat die vis kan eet. 89 00:03:56,330 --> 00:03:58,880 Op hierdie punt, alles lyk goed. 90 00:03:58,880 --> 00:04:00,990 >> Die volgende ding wat ons nodig het om te doen, is om uit te vind hoe om te kry 91 00:04:00,990 --> 00:04:03,570 die vis om te besef dat daar kos is om te eet. 92 00:04:03,570 --> 00:04:06,030 Kom ons voeg 'n ander draad aan die visse wat voortdurend 93 00:04:06,030 --> 00:04:08,790 tjeks of dit die Wink poffertjies raak. 94 00:04:08,790 --> 00:04:11,510 Ons doen dit in 'n aparte draad sedert dié manier kan ons 95 00:04:11,510 --> 00:04:13,710 voortdurend te monitor om te eet. 96 00:04:13,710 --> 00:04:16,829 Anders, ons wil net in staat wees om van tyd tot tyd te kyk vir kos 97 00:04:16,829 --> 00:04:21,180 tussen sweef, om om te draai, wag, of dink. 98 00:04:21,180 --> 00:04:22,000 >> OK. 99 00:04:22,000 --> 00:04:23,785 Nou laat ons loop ons Scratch program. 100 00:04:23,785 --> 00:04:26,921 Soos verwag, het die kos onmiddellik verberg en die 101 00:04:26,921 --> 00:04:28,920 honger vis swem heen en weer net voor hou. 102 00:04:32,050 --> 00:04:35,060 Wanneer ons druk die space bar, die Wink poffertjies kom in die oog, 103 00:04:35,060 --> 00:04:37,470 en die honger vis sê Whoo. 104 00:04:37,470 --> 00:04:39,340 Maar wag, dit is weird. 105 00:04:39,340 --> 00:04:42,150 Hoe kom die vis se "Ek is honger" gedagte onderbreek die 106 00:04:42,150 --> 00:04:43,580 ander dinge? 107 00:04:43,580 --> 00:04:45,780 Dit is omdat ons nie enige koördinasie vestig 108 00:04:45,780 --> 00:04:47,590 tussen die drie vis skrifte. 109 00:04:47,590 --> 00:04:50,610 Elkeen is in sy eie draad aan die gang, salig onbewus van wat die 110 00:04:50,610 --> 00:04:52,120 ander doen. 111 00:04:52,120 --> 00:04:54,980 Laat ons hierdie probleem oplos voor ons aanbeweeg. 112 00:04:54,980 --> 00:04:57,700 >> Koördinasie tussen drade is 'n moeilike taak, aangesien ons 113 00:04:57,700 --> 00:05:00,940 het nie uitdruklike beheer oor wanneer elke draad loop of 114 00:05:00,940 --> 00:05:02,190 nie uitvoer nie. 115 00:05:02,190 --> 00:05:04,710 Om 'n boodskap te stuur van een draad na 'n ander, moet ons 116 00:05:04,710 --> 00:05:08,300 'n veranderlike te gebruik, dat ons kan stel, of skryf, in een draad 117 00:05:08,300 --> 00:05:10,170 en lees in die ander. 118 00:05:10,170 --> 00:05:12,920 Kom ons skep 'n veranderlike genoem foodFound dat ons kan stel 119 00:05:12,920 --> 00:05:15,530 waar wanneer die vis loop in die Wink poffertjies. 120 00:05:15,530 --> 00:05:17,540 Wel, natuurlik, wil ons seker maak dat ons dit 121 00:05:17,540 --> 00:05:19,240 vals aanvanklik. 122 00:05:19,240 --> 00:05:22,540 Dan sal ons in die vis se denke draad, kyk om te sien as 123 00:05:22,540 --> 00:05:25,400 die vis gevind maaltyd voor die vertoning van die "Ek is honger" 124 00:05:25,400 --> 00:05:26,770 gedink borrel. 125 00:05:26,770 --> 00:05:29,670 >> Nou, hardloop die program weer, sien ons dat die vis 126 00:05:29,670 --> 00:05:31,580 nie met gedagtes van die honger onderbreek wanneer die 127 00:05:31,580 --> 00:05:33,820 Wink poffertjies is. 128 00:05:33,820 --> 00:05:36,820 Die laaste probleem wat ons het, is dat die Wink poffertjies gaan nie 129 00:05:36,820 --> 00:05:39,800 weg na die vis, haal unquote, "eet". 130 00:05:39,800 --> 00:05:42,305 Van die vis skrifte, daar is geen maklike manier om die irriterende om weg te steek 131 00:05:42,305 --> 00:05:44,710 poffertjies, sodat ons nodig het om 'n boodskap te stuur na die Wink poffertjies 132 00:05:44,710 --> 00:05:46,780 sprite self om weg te steek. 133 00:05:46,780 --> 00:05:49,550 Ons kan dit doen met 'n ander veranderlike dat die Wink poffertjies 134 00:05:49,550 --> 00:05:52,680 sprite het toegang tot, sowel as die vis sprite. 135 00:05:52,680 --> 00:05:55,720 >> Daar is egter 'n skoner manier om dit te doen in hierdie geval, 136 00:05:55,720 --> 00:05:57,840 want in plaas van die stuur van 'n boodskap aan 'n script wat is 137 00:05:57,840 --> 00:06:00,570 iewers in die middel van die uitvoering, kan ons die 138 00:06:00,570 --> 00:06:03,710 boodskap aan 'n script wat wag om te begin. 139 00:06:03,710 --> 00:06:07,360 Ons doen dit deur met die vis uitgesaai 'n gebeurtenis, een wat ons sal 140 00:06:07,360 --> 00:06:08,800 noem dit geëet word. 141 00:06:08,800 --> 00:06:11,510 Dan, sal ons 'n script te skep vir die Wink poffertjies wat 142 00:06:11,510 --> 00:06:13,030 wag vir hierdie gebeurtenis. 143 00:06:13,030 --> 00:06:15,560 Dit is soortgelyk aan die space bar gebeurtenis, behalwe dat hierdie 144 00:06:15,560 --> 00:06:19,250 tyd, die gebruiker is nie die een wat direk verwek die gebeurtenis. 145 00:06:19,250 --> 00:06:22,800 Nou al wat ons hoef te doen is ons foodFound veranderlike terug 146 00:06:22,800 --> 00:06:25,750 ONWAAR is, en ons kan nou die honger vis soveel 147 00:06:25,750 --> 00:06:28,470 porsies Wink proes soos dit wil. 148 00:06:28,470 --> 00:06:30,040 >> So nie te sleg nie, reg? 149 00:06:30,040 --> 00:06:33,400 In C, multi-threaded programme te skryf is meer ingewikkeld, 150 00:06:33,400 --> 00:06:35,700 maar die basiese beginsels is dieselfde. 151 00:06:35,700 --> 00:06:38,690 In elk geval, ek hoop jy het 'n goeie tyd om die bou van 'n paar pret 152 00:06:38,690 --> 00:06:41,030 konkurrente programme in Scratch. 153 00:06:41,030 --> 00:06:42,570 My naam is Nate Hardison. 154 00:06:42,570 --> 00:06:45,260 Dit is CS50.