Tip:
Highlight text to annotate it
X
[Powered by Google Translate] Nate Hardison: Când v-ați luat mai multe programe deschide pe o
calculator, se pare ca totul e
rulează în același timp.
De exemplu, s-ar putea fi de lucru într-un browser Web *** ar fi
Firefox sau Internet Explorer, ascult muzica de pe iTunes,
și de scris un eseu cu Word.
Cu toate acestea, sub capota, programele de fapt
executa una la un moment dat.
E treaba a sistemului de operare, Windows, Mac OSX, sau
Linux, pentru a gestiona fiecare dintre aceste procese separate, după ***
Programele sunt cunoscute, și a comuta între ele, astfel încât, atunci când
merge de la verificarea pagina dvs. Facebook pentru a lucra la eseu dvs.
din nou, Cuvântul este cel care se execută.
>> Uneori, însă, vrem să programe se putea
pentru a face mai multe lucruri *** ar fi aceasta, de asemenea.
Daca esti ca mine, probabil că aveți o grămadă de
file diferite deschide în browser-ul tău, una pentru e-mail,
unul cu un calendar, și așa mai departe.
Am putea trata pe fiecare filă ca un program separat sau proces,
*** ar fi Google Chrome nu, dar multe programe folosesc o
cu greutate mai mică versiune a unui proces numit un fir.
>> Un fir este doar o altă unitate de prelucrare, un set de
instrucțiuni sau cod care poate "alerga", unquote citat,
concomitent cu alte fire.
Aceasta este ceea ce face posibilă pentru tine de a căuta pe Facebook
în timp ce ascultați la mine în fundal sau pentru a avea două
Clipuri YouTube joc în același timp.
Deci, acest subiect generală, cunoscut sub numele de concurenta, de obicei,
nu veni atat de devreme la cursuri de informatică
deoarece detaliile de nivel inferior necesită discuții
sisteme de operare și similare.
Cu toate acestea, limbajul de programare folosim la
începutul CS50, Scratch, ofera o serie de instrumente pentru a puturos
face mai ușor pentru a scrie programe cu mai multe lucruri
se întâmplă dintr-o dată.
>> Când a construi programe răzuibile, ești în mod constant
de lucru cu fire.
Fiecare script Scratch, care este un bloc de cod care începe cu
una dintre piesele puzzle-ului "când", poate fi gândit
ca un fir separat.
Să ne uităm la un program Scratch simplu pentru a vedea *** funcționează.
>> Aici, ne-am luat un obiect de pește, sau Sprite, cu două scripturi
că atât de pornire atunci când facem clic pe butonul mic de steagul verde.
Primul script controlează mișcarea peștelui.
Atunci când se face clic pe steagul verde, peștele devine plasat
pe partea stângă a ecranului, numit etapa,
cu care se confruntă la dreapta.
Apoi, într-un set de instrucțiuni care va alerga pentru totdeauna, până când vom
opri programul, peștele alunecă spre dreapta,
se în jurul valorii de, merge înapoi la stânga, și
se în jurul valorii de nou.
Scriptul două controleaza procesul de pește gândire.
Se pare că acesta este un pește foame.
Deci, după o așteptare de 3 secunde, peștele va gândi,
"Mi-e foame", pentru un al doilea a patra.
Acest script, de asemenea, ruleaza pentru totdeauna.
Și, după *** vom vedea, de la rularea programului, făcând clic pe
steagul verde, ambele scripturi par să execute
simultan.
Peștii se deplasează și se gândește în același timp.
>> Deoarece pește săraci arată atât de foame, hai să adăugați în unele
bufe brânzos pentru ea să mănânce.
Să sperăm că nu se va dezintegra în apă.
Când vom adăuga într-un sprite al doilea, vom fi, de asemenea, posibilitatea de a
adaugă în script-urile corespunzătoare în acest spirit.
Și, prin urmare, nu va mai fi un alt set de
fire care va rula.
Pentru a da de utilizare a controlului programului nostru de peste, atunci când
pește foame devine hrană, să spunem că ori de câte ori Space
Bar este lovit, bufe brânzos apar pe scena pentru
de pește să mănânce.
Înainte de a lovit bara de spațiu, vom dori să păstreze brânzos
bufe ascunse, astfel încât peștele nu le pot vedea.
Pentru a face acest lucru, vom avea nevoie de o pereche de script-uri pentru
bufe brânzos Sprite.
Primul script, steagul verde, se va ascunde doar mâncare.
Spre deosebire de alte scripturi care le-am scris, aceasta nu se va păstra
de rulare pentru totdeauna.
Acesta va începe și termina foarte repede, chiar atunci când facem clic
verde pavilion butonul.
>> Scriptul urmator vom avea va aștepta pentru Space Bar pentru a fi
apăsat înainte de a executa.
Noi putem apel în așteptare pentru datele introduse de utilizator "în așteptare" sau "ascultare"
pentru un eveniment.
Și codul de care execută atunci când un eveniment este primit sau
auzit este numit de manipulare cod de eveniment.
Nostru Space Bar de tratare a evenimentului va arăta bufe brânzos pe
ecran, astfel încât peștele le poate mânca.
În acest moment, totul arată bine.
>> Următorul lucru ce trebuie să facem este să dau seama *** să obțineți
pește pentru a realiza că nu e mâncare.
Să adăugăm un alt thread pentru a pește, care în mod constant
verifică dacă sunt sau nu se ating de bufe ieftin.
Noi facem acest lucru într-un fir separat, deoarece în acest fel putem
în mod constant verifica pentru produse alimentare.
În caz contrar, vom fi doar în măsură să verifice periodic pentru produse alimentare
între alunecare, de cotitură în jurul valorii de, în așteptare, sau de gândire.
>> OK.
Acum, haideți să rulați programul nostru Scratch.
*** era de asteptat, produse alimentare imediat și ascunde
pește foame înoată înainte și înapoi, la fel ca înainte.
Când ne-am lovit Space Bar, bufe brânzos vin în vedere,
și pește foame spune whoo.
Dar stai, asta e ciudat.
*** se pește "mi-e foame", întrerupe gandire
alte chestii?
Acest lucru se datorează faptului că nu am stabili o coordonare
între cele trei scenarii de pește.
Fiecare fir se execută în propria sa, orb la ceea ce
alții fac.
Să rezolva această problemă înainte de a ne muta pe.
>> Coordonarea între fire este o sarcină dificilă, deoarece am
nu au control asupra explicită atunci când se execută fiecare fir de executie sau
nu se execută.
Pentru a trimite un mesaj de la un fir la altul, vom avea nevoie de
de a utiliza o variabilă pe care le pot stabili, sau scrie, într-un singur fir
și se citesc în altă parte.
Să creăm un foodFound variabilă numită pe care le pot fi setate pentru
adevărat atunci când peștii se execută în bufe brânzos.
Ei bine, desigur, vrem să ne asigurăm că l-am setat la
fals inițial.
Apoi, în gândirea fir de pește, vom verifica pentru a vedea dacă
peștele și-a găsit alimentar înainte de afișarea "mi-e foame"
gândit bule.
>> Acum, rularea programului din nou, vom vedea că peștele
nu se întrerupe cu gânduri de foame atunci când
bufe brânzos sunt în afara.
Problema finala care o avem este că bufe brânzos nu merg
distanță după pește, cita citatul, "mănâncă" ei.
Din scripturile de pește, nu există nici o modalitate ușoară de a ascunde brânzos
bufe, asa ca avem nevoie pentru a trimite un mesaj la bufe brânzos
Sprite pentru a se ascunde.
Am putea face acest lucru cu o altă variabilă care bufe brânzos
Sprite are acces la, precum și sprite de pește.
>> Cu toate acestea, există o modalitate de a face acest lucru mai curat, în acest caz,
deoarece în loc de a trimite un mesaj la un script care este
undeva în mijlocul de executare, putem trimite
mesajul într-un script care așteaptă să înceapă.
Noi facem acest lucru prin având în pește difuza un eveniment, o vă vom
suna mâncat.
Apoi, vom crea un script pentru bufe brânzos, care va
așteptați pentru acest eveniment.
Acest lucru este similar cu evenimentul Space Bar, cu excepția faptului că această
timp, utilizatorul nu e cel de declanșare direct evenimentul.
Acum tot ce trebuie să facem este amplasat în spatele nostru este variabilă foodFound
la fals, și putem oferi acum de pește foame cât mai multe
porții de bufe brânzos ca vrea.
>> Deci, nu prea rău, nu?
În C, scris multi-threaded programe este mult mai complicat,
dar elementele de bază sunt aceleași.
Oricum, sper că aveți o mare de timp construirea unor distracție
programe concurente în zero.
Numele meu este Nate Hardison.
Acest lucru este CS50.