[Powered by Google Translate] Nate HARDISON: Kapag mayroon kang maramihang mga programa buksan sa isang computer, tila tulad ng lahat ng na tumatakbo sa parehong oras. Halimbawa, maaari kang nagtatrabaho sa isang web browser tulad ng Firefox o Internet Explorer, pakikinig sa musika sa iTunes, at pagsusulat ng sanaysay na may Salita. Gayunpaman, sa ilalim ng hood, ang mga programa sa aktwal patakbuhin nang paisa-isa. Ang trabaho ng operating system, Windows, Mac OSX, o Linux, upang pamahalaan ang bawat isa ng mga hiwalay na proseso, dahil ang programa ay kilala, at magpalipat-lipat sa pagitan ng mga ito kaya na kapag ikaw ay pumunta mula sa pagsuri ng iyong pahina sa Facebook sa nagtatrabaho sa iyong sanaysay muli, ang Salita na tumatakbo. Minsan, bagaman, nais naming programa ang kanilang mga sarili upang magawang gawin ng maraming mga bagay na tulad nito,. Kung ikaw ay tulad ng sa akin, marahil ng grupo ng sa iba't ibang mga tab na buksan sa iyong web browser, isa para sa email, ang isa ay may isang kalendaryo, at iba pa. Maaari naming ituring ang bawat tab bilang isang hiwalay na programa o proseso, tulad ng Google Chrome, ngunit maraming mga programa gamitin ng layter-timbang na bersyon ng isang proseso na tinatawag na isang thread. Thread ay lamang ng isa pang yunit ng pagproseso, ang isang hanay ng mga mga tagubilin o code na maaaring "patakbuhin ang", quote magpanipi, Kasabay sa iba pang mga thread. Ito ay kung ano ang ginagawang posible para sa iyo upang mag-browse sa Facebook habang nakikinig sa akin sa background o may dalawang Mga video sa YouTube naglalaro sa parehong oras. Kaya, ito pangkalahatang paksa, na kilala bilang concurrency, karaniwang hindi makabuo kaya maagang sa mga kurso sa agham ng kompyuter dahil mas mababa ang antas ng detalye ay nangangailangan ng talakayan ng operating system at tulad. Gayunpaman, ang mga programming language na ginagamit namin sa simula ng CS50, simula, nagbibigay ng ilang mga nakakatawang mga tool upang gawing mas madali na magsulat ng mga programa na may maraming mga bagay nangyayari nang sabay-sabay. Kapag bumuo ka ng mga programa sa simula, ikaw ay patuloy na nagtatrabaho sa mga thread. Bawat simula script, na kung saan ay isang bloke ng code na nagsisimula sa isa ng "kapag" piraso puzzle, naisip ng bilang isang hiwalay na thread. Tingnan natin sa isang simpleng programa sa simula upang makita kung paano ito gumagana. Dito, kami nakakuha ng isda bagay, o engkanto, may dalawang script na ang parehong simula kapag namin i-click ang maliit na berdeng pindutan ng bandila. Ang unang script kumokontrol sa paggalaw ng isda. Kapag-click ang berdeng bandila, isda ay makakakuha inilagay sa kaliwang bahagi ng screen, na tinatawag na entablado, nakaharap sa kanan. Pagkatapos, sa isang hanay ng mga tagubilin na makikita patakbuhin magpakailanman, hanggang sa aming itigil ang programa, isda glides sa kanang bahagi, lumiliko sa paligid, napupunta pabalik sa kaliwang bahagi, at lumiliko sa paligid muli. Ang pangalawang script ay kinokontrol iisip proseso ang isda. Ito lumiliko out na ito ay isang gutom isda. Kaya pagkatapos na maghintay ng 3 segundo, isda ay sa tingin, "Ako gutom," para sa isang ika-apat na segundo. Din tumatakbo ang script na ito magpakailanman. At habang nakikita namin, mula sa pagtakbo sa programa sa pamamagitan ng pag-click sa berde flag, lilitaw ang parehong script upang maisagawa sabay-sabay. Isda ang mga gumagalaw at sa palagay sa parehong oras. Dahil sa mahihirap na isda mukhang kaya gutom, sabihin idagdag sa ilang cheesy puffs para kumain ito. Sana hindi nila matibag sa tubig. Kapag naming idagdag sa isang ikalawang engkanto, gagamitin din namin magagawang mag- idagdag sa script na naaayon sa na engkanto. At, samakatuwid, may makikita isa pang hanay ng mga thread na makikita patakbuhin. Upang bigyan ang gumagamit ng aming programa kontrol sa kapag ang gutom isda ay nakakakuha ng pagkain, sabihin natin na sa tuwing ang Space Bar ay pindutin ang, cheesy puffs lilitaw sa entablado para sa isda kumain. Bago namin pindutin ang Space Bar, makikita namin nais na panatilihin ang cheesy puffs nakatago sa gayon ay ang isda ay hindi maaaring makita ang mga ito. Upang gawin ito, kakailanganin naming ang isang pares ng mga script para sa cheesy puffs engkanto. Ang unang script, ang berdeng flag, itago ang mga pagkain. Hindi tulad ng iba pang mga script na namin ang nakasulat, ang isang ito ay hindi panatilihin tumatakbo magpakailanman. Ito ay simulan at tapusin ang masyadong mabilis, kanan kapag kami ay i-click ang ang berdeng pindutan ng flag. Ang susunod na script na mayroon kami ay maghintay para sa Space Bar upang maging pinindot bago execute. Maaari naming tawagan ang naghihintay para sa user input "naghihintay" o "nakikinig" para sa isang kaganapan. At ang code na executes kapag ang isang kaganapan ay natanggap o narinig ay tinatawag na code ng kaganapan handling. Aming Space Bar kaganapan handler ipakita ang cheesy puffs sa ang screen upang isda na makakain ang mga ito. Sa puntong ito, lahat ng naghahanap ng magandang. Ang susunod na bagay na kailangan namin upang gawin ay upang malaman kung paano upang makakuha ng isda upang mapagtanto na pagkain na upang kumain. Natin magdagdag ng isa pang thread sa isda na patuloy tseke man o hindi ito ng pagpindot sa mga cheesy puffs. Ginagawa namin ito sa isang hiwalay na thread dahil na paraan na aming makakaya patuloy na suriin para sa pagkain. Kung hindi man, gusto lamang naming ma panaka-nakang suriin para sa pagkain sa pagitan gliding, i-sa paligid, naghihintay, o pag-iisip. OK. Ngayon sabihin patakbuhin ang aming programa sa scratch. Tulad ng inaasahan, pagkain agad Itinatago at ang gutom isda swims papunta at pabalik lang bang bago. Kapag namin pindutin ang Space Bar, ang cheesy puffs lumitaw, at ang gutom na isda sabi ni whoo. Ngunit maghintay, na kakaiba. Paano dumating "ako gutom" ang mga isda iisip interrupts iba pang mga bagay-bagay? Ito ay dahil hindi namin magtatag ng anumang koordinasyon sa pagitan ng tatlong script ng isda. Ang bawat isa ay tumatakbo sa sarili nitong thread, makakalimutin sa kung ano ang iba ang ginagawa. Natin ayusin ito bago namin ilipat sa. Koordinasyon sa pagitan ng mga thread ay isang nakakalito gawain dahil sa kami walang tahasang kontrol sa kapag tumatakbo ang bawat thread o hindi tumakbo. Upang magpadala ng mensahe mula sa isang thread sa ibang, kailangan nating gamitin ang isang variable na maaari naming itakda, o sumulat, sa isang thread at basahin sa isa. Sabihin lumikha ng isang variable na tinatawag na foodFound na maaari naming itakda sa tunay na kapag ang isda tumatakbo sa cheesy puffs. Well, siyempre, gusto namin upang matiyak na na-set namin ito sa FALSE simula. Pagkatapos, sa pag-iisip ng thread ang isda, makikita namin suriin upang makita kung isda ay nahanap na pagkain bago pagpapakita ng "ako gutom" naisip bubble. Ngayon, ang pagpapatakbo ng programa muli, nakita namin na ang mga isda ay hindi nagambala na may mga saloobin ng kagutuman kapag ang cheesy puffs out. Ang huling problema na mayroon kami na ang mga cheesy puffs hindi pumunta matapos ang layo ng isda, sipiin ang magpanipi, "kumakain" sa kanila. Mula sa script ng isda, walang madaling paraan upang itago ang cheesy puffs, kaya kailangan namin upang magpadala ng mensahe sa cheesy puffs engkanto upang itago mismo. Maaari naming gawin ito sa isa pang variable na ang cheesy puffs Ang engkanto ay may access sa, pati na rin ang isda engkanto. Gayunpaman, mayroong isang mas malinis na paraan upang gawin ito sa kasong ito, dahil sa halip na magpadala ng mensahe sa isang script na sa isang lugar sa gitna ng e-execute, maaari kaming magpadala sa mensahe sa isang script na naghihintay upang magsimula. Ginagawa namin ito sa pamamagitan ng pagkakaroon ng isda-broadcast ng isang kaganapan, isang bibigyan namin tumawag kinakain. Pagkatapos, lilikha kami ng script para sa cheesy puffs na ay maghintay para sa kaganapang ito. Na ito ay katulad sa kaganapan Space Bar, maliban na ito oras, ang user ay hindi direkta na nagti-trigger ang kaganapan. Ngayon ang lahat ng kami ay may sa gawin ay nakatakda ang aming foodFound likod ng variable sa False, at maaari naming ngayon magbigay ng gutom isda ng maraming servings ng cheesy puffs bilang ito nais. Kaya hindi masyadong masama, tama? Sa C, pagsusulat ng mga multi-may sinulid na programa ay mas komplikado, ngunit ang mga pangunahing kaalaman ay ang parehong. Pa Rin, Umaasa ako na mayroon kang isang mahusay na oras sa pagbuo ng ilang masaya sabay-sabay na mga programa sa scratch. Ang pangalan ko ay Nate Hardison. Ito ay CS50.