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