[Powered by Google Translate] NATE Hardison: Kiedy masz wiele programów otworzyć na
komputer wydaje się, że wszystko jest w
działa się w tym samym czasie.
Na przykład, być może działa w przeglądarce internetowej, jak
Firefox lub Internet Explorer, słuchanie muzyki w iTunes,
i pisanie eseju z programem Word.
Jednak pod maską, programy faktycznie
uruchomić jeden na raz.
Jest to praca w systemie operacyjnym Windows, Mac OSX, lub
Linux zarządzanie każdym z tych oddzielnych procesach, w
programy są znane, i przełączać się między nimi, tak aby po
przejść od sprawdzania stronę Facebook do pracy na esej
ponownie, Słowo jest tym, który działa.
>> Czasem jednak chcemy, programy się być w stanie
zrobić wiele rzeczy jak to, too.
Jeśli jesteś podobny do mnie, prawdopodobnie masz kilka
różnych kartach otworzyć w przeglądarce internetowej, po jednej na e-mail,
jedna z kalendarza, i tak dalej.
Możemy traktować każdą kartę jako osobny program lub proces,
jak Google Chrome ma, ale wiele programów używa
lżejsze Waga wersji procesu nazywa wątku.
>> Wątek jest po prostu kolejną jednostkę przetwarzania, zestaw
instrukcji lub kodu, które można "uruchomić" Koniec cytatu,
jednocześnie z innymi wątkami.
To jest to, co sprawia, że ​​jest możliwe, aby przeglądać Facebook
podczas słuchania mnie w tle lub mieć dwa
YouTube videos gry w tym samym czasie.
Tak, ten ogólny temat, znany jako współbieżności, zazwyczaj
nie przychodzi tak wcześnie w kursach informatycznych
ponieważ niższego szczebla szczegóły wymagają dyskusji
Systemy operacyjne i podobne.
Jednak język programowania używamy w
początek CS50, Scratch, zapewnia pewne zmyślne narzędzia
łatwiej pisać programy z wielu rzeczy,
dzieje jednocześnie.
>> Podczas tworzenia programów Scratch, jesteś stale
pracy z wątków.
Każdy skrypt Scratch, który jest blok kodu, który zaczyna się
jeden z "kiedy" puzzli, można traktować
w osobnym wątku.
Spójrzmy na prosty program Scratch, aby zobaczyć jak to działa.
>> Tutaj mamy obiekt ryb, lub Sprite, z dwóch skryptów
że zarówno początek, kiedy kliknij mały zielony przycisk flagi.
Pierwszy skrypt kontroluje rybiego ruch.
Gdy zielona flaga zostanie kliknięty, ryba zostanie umieszczony
po lewej stronie ekranu, zwany etap,
skierowanym w prawo.
Następnie, w zestaw instrukcji, że będziemy trwać wiecznie, aż
zatrzymać program, ryba szybuje do prawej strony,
odwraca się, idzie z powrotem do lewej strony, a
odwraca się ponownie.
Drugi skrypt kontroluje rybiego proces myślowy.
Okazuje się, że to jest głodny ryby.
Więc po odczekaniu 3 sekund, ryby będą myśleć,
"Jestem głodny", na czwartą sekundy.
Skrypt ten działa zawsze.
I jak widać, od uruchomienia programu przez kliknięcie
Flaga zielona, ​​oba skrypty wydają się wykonać
jednocześnie.
Ryba porusza się i myśli, że w tym samym czasie.
>> Od biednych ryba wygląda tak głodny, dodajmy w niektórych
cheesy kłęby na to, aby jeść.
Miejmy nadzieję, że nie rozpadają się w wodzie.
Gdy dodamy w drugim ikonki, będziemy również w stanie
dodać skryptów odpowiadających tej ikonki.
I, co za tym idzie, nie będzie inny zestaw
wątków, które będą uruchamiane.
Aby dać użytkownikowi naszej kontroli nad programem, gdy
głodny ryby dostaje jedzenie, powiedzmy, że w przypadku, gdy miejsce
Bar jest trafiony, cheesy kłęby pojawić na scenie
ryb do jedzenia.
Zanim nacisnąć spację, to chcemy utrzymać cheesy
Chrupki ukryte tak, że ryba nie może ich zobaczyć.
Aby to zrobić, musimy kilka skryptów dla
cheesy kłęby ikonki.
Pierwszy skrypt, zielona flaga, będzie po prostu ukryć jedzenie.
W przeciwieństwie do innych skryptów pisaliśmy, to nie będzie na bieżąco
działa zawsze.
Będzie ona rozpocząć i zakończyć bardzo szybko, gdy klikniemy prawym
zielony przycisk flag.
>> Kolejny skrypt mamy będzie czekać na spację, aby być
naciśnięty przed wykonaniem.
Możemy wywołać oczekiwania na dane od użytkownika "oczekiwania" lub "słuchania"
dla zdarzenia.
I kod, który wykonuje po odebraniu zdarzenia lub
słyszałem nazywa kod obsługi zdarzenia.
Nasza Spacja obsługi zdarzeń pokaże kiepskie zaciągnięć na
ekran tak, że ryby mogą je zjeść.
W tym momencie, wszystko wygląda dobrze.
>> Następną rzeczą, którą musisz zrobić, to dowiedzieć się, jak uzyskać
ryby sobie sprawę, że nie ma jedzenia.
Dodajmy kolejny wątek do ryb, które stale
sprawdza, czy nie jest to dotykające tandetne zaciągnięć.
Robimy to w oddzielnym wątku od tego sposób możemy
stale sprawdzić na jedzenie.
W przeciwnym razie, chcemy być w stanie okresowo sprawdzać za jedzenie
pomiędzy szybownictwa, odwracając się, czekając, czy myślenia.
>> OK.
Teraz uruchomić nasz program Scratch.
Zgodnie z oczekiwaniami, jedzenie i natychmiast chowa
głodny ryb pływa w tę iz powrotem tak samo jak wcześniej.
Kiedy nacisnąć spację, że kiepskie kłęby przyjść do widzenia,
i głodny ryby mówi Whoo.
Ale poczekaj, to dziwne.
Jak to ryby w "Jestem głodny" przerywa myśli
inne rzeczy?
To dlatego, że nie ustanawia żadnej koordynacji
między trzema skryptów ryb.
Każdy pracuje we własnym wątku, nie zważając na to, co
robią inni.
Miejmy to naprawić zanim przejdziemy dalej.
>> Koordynacja między wątków jest trudne zadanie, ponieważ my
nie ma wyraźnej kontroli nad gdy każdy wątek działa lub
nie można go uruchomić.
Aby wysłać wiadomość z jednego wątku do drugiego, musimy
użyć zmiennej możemy ustawić, lub napisać, w jednym wątku
i czytać w innych.
Stwórzmy zmienną foodFound że możemy ustawić na
prawdziwe, gdy ryby biegnie do cheesy zaciągnięć.
Cóż, oczywiście, chcemy się upewnić, że możemy ustawić go
false początkowo.
Następnie w rybim wątku myślenia, będziemy sprawdzać, czy
ryba znalazła jedzenie przed wyświetleniem "Jestem głodny"
myśli bańki.
>> Teraz uruchomiony program ponownie widzimy, że ryby
nie przerywa się z myślami, gdy głód
cheesy kłęby są obecnie.
Ostatnim problemem mamy jest to, że kiepskie kłęby nie idą
dala od ryb, zacytuję koniec cytatu, "zjada" je.
Ze skryptów ryb, nie ma łatwego sposobu, aby ukryć cheesy
Chrupki, więc musimy wysłać wiadomość do cheesy pociągnięć
sprite się ukryć.
Możemy to zrobić z innej zmiennej, że kiepskie kłęby
sprite ma dostęp, a także ikonki ryb.
>> Jednak to jest lepszy sposób to zrobić w tym przypadku,
ponieważ zamiast wysyłać wiadomości do skryptu, który znajduje się w
gdzieś w połowie realizacji, możemy wysłać
przesłanie do skryptu, który czeka na start.
Robimy to poprzez ryby transmitować wydarzenie, jeden Będziemy
zadzwoń zjedzone.
Następnie będziemy utworzyć skrypt dla tandetnych pociągnięć, które będą
czekać na to wydarzenie.
Jest to podobne do przypadku spacji, poza tym, że
czas, użytkownik nie jeden bezpośrednio wywołując zdarzenie jest.
Teraz wszystko, co musimy zrobić, to ustawić z powrotem nasz foodFound zmienna
false, a teraz możemy dać głodnemu rybę, jak wiele
porcji cheesy pociągnięć jak chce.
>> Więc nie jest tak źle, prawda?
W C, pisanie programów wielowątkowych jest bardziej skomplikowana,
ale podstawy są takie same.
W każdym razie, mam nadzieję, że masz wielki czas budowy zabawić
współbieżnych programów w Scratch.
Nazywam się Nate Hardison.
To CS50.