1 00:00:07,360 --> 00:00:09,360 [Powered by Google Translate] Nate HARDISON: Kapag mayroon kang maramihang mga programa buksan sa isang 2 00:00:09,360 --> 00:00:11,250 computer, tila tulad ng lahat ng 3 00:00:11,250 --> 00:00:12,880 na tumatakbo sa parehong oras. 4 00:00:12,880 --> 00:00:15,350 Halimbawa, maaari kang nagtatrabaho sa isang web browser tulad ng 5 00:00:15,350 --> 00:00:19,360 Firefox o Internet Explorer, pakikinig sa musika sa iTunes, 6 00:00:19,360 --> 00:00:21,490 at pagsusulat ng sanaysay na may Salita. 7 00:00:21,490 --> 00:00:24,240 Gayunpaman, sa ilalim ng hood, ang mga programa sa aktwal 8 00:00:24,240 --> 00:00:25,830 patakbuhin nang paisa-isa. 9 00:00:25,830 --> 00:00:29,750 Ang trabaho ng operating system, Windows, Mac OSX, o 10 00:00:29,750 --> 00:00:33,070 Linux, upang pamahalaan ang bawat isa ng mga hiwalay na proseso, dahil ang 11 00:00:33,070 --> 00:00:35,900 programa ay kilala, at magpalipat-lipat sa pagitan ng mga ito kaya na kapag ikaw ay 12 00:00:35,900 --> 00:00:38,610 pumunta mula sa pagsuri ng iyong pahina sa Facebook sa nagtatrabaho sa iyong sanaysay 13 00:00:38,610 --> 00:00:41,590 muli, ang Salita na tumatakbo. 14 00:00:41,590 --> 00:00:44,890 >> Minsan, bagaman, nais naming programa ang kanilang mga sarili upang magawang 15 00:00:44,890 --> 00:00:47,440 gawin ng maraming mga bagay na tulad nito,. 16 00:00:47,440 --> 00:00:49,630 Kung ikaw ay tulad ng sa akin, marahil ng grupo ng 17 00:00:49,630 --> 00:00:52,730 sa iba't ibang mga tab na buksan sa iyong web browser, isa para sa email, 18 00:00:52,730 --> 00:00:55,070 ang isa ay may isang kalendaryo, at iba pa. 19 00:00:55,070 --> 00:00:58,270 Maaari naming ituring ang bawat tab bilang isang hiwalay na programa o proseso, 20 00:00:58,270 --> 00:01:01,300 tulad ng Google Chrome, ngunit maraming mga programa gamitin ng 21 00:01:01,300 --> 00:01:04,430 layter-timbang na bersyon ng isang proseso na tinatawag na isang thread. 22 00:01:04,430 --> 00:01:07,190 >> Thread ay lamang ng isa pang yunit ng pagproseso, ang isang hanay ng mga 23 00:01:07,190 --> 00:01:10,100 mga tagubilin o code na maaaring "patakbuhin ang", quote magpanipi, 24 00:01:10,100 --> 00:01:12,560 Kasabay sa iba pang mga thread. 25 00:01:12,560 --> 00:01:15,150 Ito ay kung ano ang ginagawang posible para sa iyo upang mag-browse sa Facebook 26 00:01:15,150 --> 00:01:17,940 habang nakikinig sa akin sa background o may dalawang 27 00:01:17,940 --> 00:01:20,790 Mga video sa YouTube naglalaro sa parehong oras. 28 00:01:20,790 --> 00:01:24,660 Kaya, ito pangkalahatang paksa, na kilala bilang concurrency, karaniwang 29 00:01:24,660 --> 00:01:26,930 hindi makabuo kaya maagang sa mga kurso sa agham ng kompyuter 30 00:01:26,930 --> 00:01:29,790 dahil mas mababa ang antas ng detalye ay nangangailangan ng talakayan ng 31 00:01:29,790 --> 00:01:31,930 operating system at tulad. 32 00:01:31,930 --> 00:01:34,170 Gayunpaman, ang mga programming language na ginagamit namin sa 33 00:01:34,170 --> 00:01:38,000 simula ng CS50, simula, nagbibigay ng ilang mga nakakatawang mga tool upang 34 00:01:38,000 --> 00:01:40,390 gawing mas madali na magsulat ng mga programa na may maraming mga bagay 35 00:01:40,390 --> 00:01:42,390 nangyayari nang sabay-sabay. 36 00:01:42,390 --> 00:01:45,050 >> Kapag bumuo ka ng mga programa sa simula, ikaw ay patuloy na 37 00:01:45,050 --> 00:01:46,760 nagtatrabaho sa mga thread. 38 00:01:46,760 --> 00:01:49,770 Bawat simula script, na kung saan ay isang bloke ng code na nagsisimula sa 39 00:01:49,770 --> 00:01:52,600 isa ng "kapag" piraso puzzle, naisip ng 40 00:01:52,600 --> 00:01:54,380 bilang isang hiwalay na thread. 41 00:01:54,380 --> 00:01:58,040 Tingnan natin sa isang simpleng programa sa simula upang makita kung paano ito gumagana. 42 00:01:58,040 --> 00:02:01,730 >> Dito, kami nakakuha ng isda bagay, o engkanto, may dalawang script 43 00:02:01,730 --> 00:02:05,000 na ang parehong simula kapag namin i-click ang maliit na berdeng pindutan ng bandila. 44 00:02:05,000 --> 00:02:07,290 Ang unang script kumokontrol sa paggalaw ng isda. 45 00:02:07,290 --> 00:02:09,850 Kapag-click ang berdeng bandila, isda ay makakakuha inilagay 46 00:02:09,850 --> 00:02:12,450 sa kaliwang bahagi ng screen, na tinatawag na entablado, 47 00:02:12,450 --> 00:02:14,090 nakaharap sa kanan. 48 00:02:14,090 --> 00:02:17,070 Pagkatapos, sa isang hanay ng mga tagubilin na makikita patakbuhin magpakailanman, hanggang sa aming 49 00:02:17,070 --> 00:02:20,270 itigil ang programa, isda glides sa kanang bahagi, 50 00:02:20,270 --> 00:02:22,900 lumiliko sa paligid, napupunta pabalik sa kaliwang bahagi, at 51 00:02:22,900 --> 00:02:24,470 lumiliko sa paligid muli. 52 00:02:24,470 --> 00:02:27,410 Ang pangalawang script ay kinokontrol iisip proseso ang isda. 53 00:02:27,410 --> 00:02:29,290 Ito lumiliko out na ito ay isang gutom isda. 54 00:02:29,290 --> 00:02:32,080 Kaya pagkatapos na maghintay ng 3 segundo, isda ay sa tingin, 55 00:02:32,080 --> 00:02:34,420 "Ako gutom," para sa isang ika-apat na segundo. 56 00:02:34,420 --> 00:02:36,440 Din tumatakbo ang script na ito magpakailanman. 57 00:02:36,440 --> 00:02:38,940 At habang nakikita namin, mula sa pagtakbo sa programa sa pamamagitan ng pag-click sa 58 00:02:38,940 --> 00:02:41,730 berde flag, lilitaw ang parehong script upang maisagawa 59 00:02:41,730 --> 00:02:43,100 sabay-sabay. 60 00:02:43,100 --> 00:02:46,460 Isda ang mga gumagalaw at sa palagay sa parehong oras. 61 00:02:46,460 --> 00:02:49,030 >> Dahil sa mahihirap na isda mukhang kaya gutom, sabihin idagdag sa ilang 62 00:02:49,030 --> 00:02:50,670 cheesy puffs para kumain ito. 63 00:02:50,670 --> 00:02:53,060 Sana hindi nila matibag sa tubig. 64 00:02:53,060 --> 00:02:55,560 Kapag naming idagdag sa isang ikalawang engkanto, gagamitin din namin magagawang mag- 65 00:02:55,560 --> 00:02:58,020 idagdag sa script na naaayon sa na engkanto. 66 00:02:58,020 --> 00:02:59,580 At, samakatuwid, may makikita isa pang hanay ng mga 67 00:02:59,580 --> 00:03:00,830 thread na makikita patakbuhin. 68 00:03:03,590 --> 00:03:06,270 Upang bigyan ang gumagamit ng aming programa kontrol sa kapag ang 69 00:03:06,270 --> 00:03:09,340 gutom isda ay nakakakuha ng pagkain, sabihin natin na sa tuwing ang Space 70 00:03:09,340 --> 00:03:11,840 Bar ay pindutin ang, cheesy puffs lilitaw sa entablado para sa 71 00:03:11,840 --> 00:03:13,300 isda kumain. 72 00:03:13,300 --> 00:03:15,760 Bago namin pindutin ang Space Bar, makikita namin nais na panatilihin ang cheesy 73 00:03:15,760 --> 00:03:19,020 puffs nakatago sa gayon ay ang isda ay hindi maaaring makita ang mga ito. 74 00:03:19,020 --> 00:03:21,140 Upang gawin ito, kakailanganin naming ang isang pares ng mga script para sa 75 00:03:21,140 --> 00:03:22,750 cheesy puffs engkanto. 76 00:03:22,750 --> 00:03:26,980 Ang unang script, ang berdeng flag, itago ang mga pagkain. 77 00:03:26,980 --> 00:03:29,530 Hindi tulad ng iba pang mga script na namin ang nakasulat, ang isang ito ay hindi panatilihin 78 00:03:29,530 --> 00:03:30,560 tumatakbo magpakailanman. 79 00:03:30,560 --> 00:03:33,250 Ito ay simulan at tapusin ang masyadong mabilis, kanan kapag kami ay i-click ang 80 00:03:33,250 --> 00:03:35,000 ang berdeng pindutan ng flag. 81 00:03:35,000 --> 00:03:37,180 >> Ang susunod na script na mayroon kami ay maghintay para sa Space Bar upang maging 82 00:03:37,180 --> 00:03:39,590 pinindot bago execute. 83 00:03:39,590 --> 00:03:42,770 Maaari naming tawagan ang naghihintay para sa user input "naghihintay" o "nakikinig" 84 00:03:42,770 --> 00:03:43,860 para sa isang kaganapan. 85 00:03:43,860 --> 00:03:46,750 At ang code na executes kapag ang isang kaganapan ay natanggap o 86 00:03:46,750 --> 00:03:50,280 narinig ay tinatawag na code ng kaganapan handling. 87 00:03:50,280 --> 00:03:53,550 Aming Space Bar kaganapan handler ipakita ang cheesy puffs sa 88 00:03:53,550 --> 00:03:56,330 ang screen upang isda na makakain ang mga ito. 89 00:03:56,330 --> 00:03:58,880 Sa puntong ito, lahat ng naghahanap ng magandang. 90 00:03:58,880 --> 00:04:00,990 >> Ang susunod na bagay na kailangan namin upang gawin ay upang malaman kung paano upang makakuha ng 91 00:04:00,990 --> 00:04:03,570 isda upang mapagtanto na pagkain na upang kumain. 92 00:04:03,570 --> 00:04:06,030 Natin magdagdag ng isa pang thread sa isda na patuloy 93 00:04:06,030 --> 00:04:08,790 tseke man o hindi ito ng pagpindot sa mga cheesy puffs. 94 00:04:08,790 --> 00:04:11,510 Ginagawa namin ito sa isang hiwalay na thread dahil na paraan na aming makakaya 95 00:04:11,510 --> 00:04:13,710 patuloy na suriin para sa pagkain. 96 00:04:13,710 --> 00:04:16,829 Kung hindi man, gusto lamang naming ma panaka-nakang suriin para sa pagkain 97 00:04:16,829 --> 00:04:21,180 sa pagitan gliding, i-sa paligid, naghihintay, o pag-iisip. 98 00:04:21,180 --> 00:04:22,000 >> OK. 99 00:04:22,000 --> 00:04:23,785 Ngayon sabihin patakbuhin ang aming programa sa scratch. 100 00:04:23,785 --> 00:04:26,921 Tulad ng inaasahan, pagkain agad Itinatago at ang 101 00:04:26,921 --> 00:04:28,920 gutom isda swims papunta at pabalik lang bang bago. 102 00:04:32,050 --> 00:04:35,060 Kapag namin pindutin ang Space Bar, ang cheesy puffs lumitaw, 103 00:04:35,060 --> 00:04:37,470 at ang gutom na isda sabi ni whoo. 104 00:04:37,470 --> 00:04:39,340 Ngunit maghintay, na kakaiba. 105 00:04:39,340 --> 00:04:42,150 Paano dumating "ako gutom" ang mga isda iisip interrupts 106 00:04:42,150 --> 00:04:43,580 iba pang mga bagay-bagay? 107 00:04:43,580 --> 00:04:45,780 Ito ay dahil hindi namin magtatag ng anumang koordinasyon 108 00:04:45,780 --> 00:04:47,590 sa pagitan ng tatlong script ng isda. 109 00:04:47,590 --> 00:04:50,610 Ang bawat isa ay tumatakbo sa sarili nitong thread, makakalimutin sa kung ano ang 110 00:04:50,610 --> 00:04:52,120 iba ang ginagawa. 111 00:04:52,120 --> 00:04:54,980 Natin ayusin ito bago namin ilipat sa. 112 00:04:54,980 --> 00:04:57,700 >> Koordinasyon sa pagitan ng mga thread ay isang nakakalito gawain dahil sa kami 113 00:04:57,700 --> 00:05:00,940 walang tahasang kontrol sa kapag tumatakbo ang bawat thread o 114 00:05:00,940 --> 00:05:02,190 hindi tumakbo. 115 00:05:02,190 --> 00:05:04,710 Upang magpadala ng mensahe mula sa isang thread sa ibang, kailangan nating 116 00:05:04,710 --> 00:05:08,300 gamitin ang isang variable na maaari naming itakda, o sumulat, sa isang thread 117 00:05:08,300 --> 00:05:10,170 at basahin sa isa. 118 00:05:10,170 --> 00:05:12,920 Sabihin lumikha ng isang variable na tinatawag na foodFound na maaari naming itakda sa 119 00:05:12,920 --> 00:05:15,530 tunay na kapag ang isda tumatakbo sa cheesy puffs. 120 00:05:15,530 --> 00:05:17,540 Well, siyempre, gusto namin upang matiyak na na-set namin ito sa 121 00:05:17,540 --> 00:05:19,240 FALSE simula. 122 00:05:19,240 --> 00:05:22,540 Pagkatapos, sa pag-iisip ng thread ang isda, makikita namin suriin upang makita kung 123 00:05:22,540 --> 00:05:25,400 isda ay nahanap na pagkain bago pagpapakita ng "ako gutom" 124 00:05:25,400 --> 00:05:26,770 naisip bubble. 125 00:05:26,770 --> 00:05:29,670 >> Ngayon, ang pagpapatakbo ng programa muli, nakita namin na ang mga isda 126 00:05:29,670 --> 00:05:31,580 ay hindi nagambala na may mga saloobin ng kagutuman kapag ang 127 00:05:31,580 --> 00:05:33,820 cheesy puffs out. 128 00:05:33,820 --> 00:05:36,820 Ang huling problema na mayroon kami na ang mga cheesy puffs hindi pumunta 129 00:05:36,820 --> 00:05:39,800 matapos ang layo ng isda, sipiin ang magpanipi, "kumakain" sa kanila. 130 00:05:39,800 --> 00:05:42,305 Mula sa script ng isda, walang madaling paraan upang itago ang cheesy 131 00:05:42,305 --> 00:05:44,710 puffs, kaya kailangan namin upang magpadala ng mensahe sa cheesy puffs 132 00:05:44,710 --> 00:05:46,780 engkanto upang itago mismo. 133 00:05:46,780 --> 00:05:49,550 Maaari naming gawin ito sa isa pang variable na ang cheesy puffs 134 00:05:49,550 --> 00:05:52,680 Ang engkanto ay may access sa, pati na rin ang isda engkanto. 135 00:05:52,680 --> 00:05:55,720 >> Gayunpaman, mayroong isang mas malinis na paraan upang gawin ito sa kasong ito, 136 00:05:55,720 --> 00:05:57,840 dahil sa halip na magpadala ng mensahe sa isang script na 137 00:05:57,840 --> 00:06:00,570 sa isang lugar sa gitna ng e-execute, maaari kaming magpadala sa 138 00:06:00,570 --> 00:06:03,710 mensahe sa isang script na naghihintay upang magsimula. 139 00:06:03,710 --> 00:06:07,360 Ginagawa namin ito sa pamamagitan ng pagkakaroon ng isda-broadcast ng isang kaganapan, isang bibigyan namin 140 00:06:07,360 --> 00:06:08,800 tumawag kinakain. 141 00:06:08,800 --> 00:06:11,510 Pagkatapos, lilikha kami ng script para sa cheesy puffs na ay 142 00:06:11,510 --> 00:06:13,030 maghintay para sa kaganapang ito. 143 00:06:13,030 --> 00:06:15,560 Na ito ay katulad sa kaganapan Space Bar, maliban na ito 144 00:06:15,560 --> 00:06:19,250 oras, ang user ay hindi direkta na nagti-trigger ang kaganapan. 145 00:06:19,250 --> 00:06:22,800 Ngayon ang lahat ng kami ay may sa gawin ay nakatakda ang aming foodFound likod ng variable 146 00:06:22,800 --> 00:06:25,750 sa False, at maaari naming ngayon magbigay ng gutom isda ng maraming 147 00:06:25,750 --> 00:06:28,470 servings ng cheesy puffs bilang ito nais. 148 00:06:28,470 --> 00:06:30,040 >> Kaya hindi masyadong masama, tama? 149 00:06:30,040 --> 00:06:33,400 Sa C, pagsusulat ng mga multi-may sinulid na programa ay mas komplikado, 150 00:06:33,400 --> 00:06:35,700 ngunit ang mga pangunahing kaalaman ay ang parehong. 151 00:06:35,700 --> 00:06:38,690 Pa Rin, Umaasa ako na mayroon kang isang mahusay na oras sa pagbuo ng ilang masaya 152 00:06:38,690 --> 00:06:41,030 sabay-sabay na mga programa sa scratch. 153 00:06:41,030 --> 00:06:42,570 Ang pangalan ko ay Nate Hardison. 154 00:06:42,570 --> 00:06:45,260 Ito ay CS50.