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