[Powered by Google Translate] Nate HARDISON: Кога имаш повеќе програми отворите на компјутер, ми се чини дека сè е работи во исто време. На пример, може да се работат во веб прелистувач како Firefox или Internet Explorer, слушање музика на iTunes, и пишување есеј со Word. Сепак, под хауба, програмите всушност работи едно по едно време. Тоа е работа на оперативниот систем, Microsoft Windows, Mac OSX или Linux, да управуваат со секоја од овие одделни процеси, како програми се познати, и да се префрлате помеѓу нив, така што кога ќе одат од проверка на вашата Фејсбук страница за да работат на вашиот есеј повторно, Word е оној кој е трчање. Понекогаш, сепак, сакаме самите програми да бидат во можност да направите повеќе работи како оваа, исто така. Ако сте како мене, веројатно имаат еден куп на различни јазичиња отвори во вашиот веб прелистувач, еден за електронска пошта, еден со календарот, и така натаму. Ние би можеле да се однесуваат едни кон табот како посебна програма или процес, како Гугл Хром не, но многу програми користите полесни тежина верзија на процес наречен конец. А темата е само уште една единица за обработка, збир на инструкции или код кој може да "работи", цитирам unquote, истовремено со други теми. Тоа е она што го прави возможно за да ја разгледате Фејсбук додека го слушате за мене во позадина или да има две YouTube видео игра во исто време. Значи, оваа општа тема, познат како Concurrency, обично не излезе толку рано во компјутерски науки курсеви затоа што пониско ниво детали бараат дискусија оперативни системи и слично. Сепак, програмски јазик се користи во почетокот на CS50, гребење, обезбедува некои Вешта алатки за да може полесно да пишуваат програми со повеќе работи случува одеднаш. Кога ќе се изгради гребење програми, ти си постојано работи со теми. Секоја гребење скрипта, кој е кодот блок што започнува со еден од "кога" мозаик парчиња, може да се смета за како посебна нишка. Ајде да погледнеме во едноставен гребење програма да се види како тоа функционира. Еве, ние имаме риба објект, или самовила, со две сценарија дека и двете почеток кога ќе кликнете на мало зелено знаме копче. Првиот скрипта контролира движењето на рибата. Кога зелено знаме е кликнато, риба добива ставен на левата страна на екранот, наречен фаза, со кои се соочува десно. Потоа, во еден сет од инструкции, кои ќе работи засекогаш, додека ние запре програмата, риба лета на десната страна, се врти, се навраќа на левата страна, и врти повторно. Втората скрипта контролира мисла процес на рибата. Излезе дека ова е гладен риба. Па по чекање за 3 секунди, рибата ќе мислам, "Јас сум гладен" за четвртиот секунда. Оваа скрипта исто така, работи засекогаш. И како што гледаме, од водење на програма со кликнување на зелено знаме, и скрипти се појави да се изврши истовремено. Рибата се движи и мисли во исто време. Од сиромашните риба изгледа толку гладни, да додадете во некои вулгарен puffs за да јадат. Се надевам дека тие не ќе се распадне во водата. Кога ќе се додаде во вториот самовила, ние исто така ќе бидат во можност да додадете во скрипти одговара дека самовила. И, оттука, ќе има уште еден сет на теми кои ќе се кандидира. Да се ​​даде на корисник на нашата програма контрола врз кога гладни риби добива храна, да речеме дека секогаш кога простор Бар е хит, вулгарен puffs се појави на сцената за риба за јадење. Пред да се погоди Празно место, ќе сакате да го задржите вулгарен puffs скриени, така што рибата не може да ги види. Да го направите ова, ние ќе треба неколку сценарија за вулгарен puffs самовила. Првиот скрипта, зелено знаме, само ќе ги кријат храна. За разлика од други сценарија ние сум напишал, ова не ќе го задржи работи засекогаш. Таа ќе почне и ќе заврши многу брзо, во право кога ќе кликнете зелено знаме копче. Следниот скрипта имаме ќе чека на просторот бар да биде притиснат пред извршување. Можеме да го наречеме чекање за корисникот влез "чекање" или "слушање" за настанот. И кодот кој извршува кога еден настан се добиени или слушнале се нарекува настан ракување код. Нашите растојание настан управувачот ќе се покаже на вулгарен puffs на на екранот, така што риби да ги јадат. Во овој момент, сè е во потрага добро. Следното нешто што треба да направите е да дознаам како да се добие рибите да сфатат дека има што да јадам. Ајде да додадете уште една нишка на риби кои постојано проверува дали е или не е допирање на вулгарен puffs. Ние го правиме ова во посебна нишка, бидејќи на тој начин можеме да постојано се провери за храна. Инаку, ние само ќе бидат во можност да периодично да проверува за храна помеѓу плови, вртејќи се околу, чекајќи, или размислување. ОК. Сега ајде да се кандидира на нашите гребење програма. Како што се очекуваше, храната веднаш се крие и гладни риби плива и назад, исто како порано. Кога ќе се погоди простор бар, вулгарен puffs дојде во погледот, и гладни риби вели Whoo. Но чекајте, тоа е чудно. Како дојде на рибата "Јас сум гладен" мисла прекинува други нешта? Тоа е затоа што не воспостави некаква координација меѓу трите риба скрипти. Секој работи во сопствена нишка, несвесни за она што другите го прават. Да го надминете овој, пред да продолжат понатаму. Координација помеѓу теми е слабо задача, бидејќи ние немаат експлицитна контрола врз кога секоја тема работи или не работи. За да испратите порака од една нишка на друг, ќе треба да се користи променлива дека ние може да се постави, или да пишуваат, во една нишка и читање во другата. Да се ​​создаде променлива наречена foodFound дека ние може да се постави на точно кога рибата бега во вулгарен puffs. Па, се разбира, ние сакаме да се осигураме дека можеме да го постави за false почетокот. Потоа, во размислување тема на риба, ние ќе се провери да се види дали риба најде храна пред прикажување на "Јас сум гладен" мисла меур. Сега, водење на програма, повторно, можеме да видиме дека рибите не се прекинува со мисли од глад кога вулгарен puffs се надвор. Конечниот проблем имаме е дека вулгарен puffs не одат далеку по риба, цитирам unquote, "јаде" нив. Од риба скрипти, нема лесен начин за да се скрие вулгарен puffs, па ние треба да се испрати порака до вулгарен puffs самовила да се сокрие. Ние би можеле да го направите ова со друга променлива која вулгарен puffs самовила има пристап до, како и риба самовила. Сепак, таму е почиста начин да го направите ова во овој случај, бидејќи наместо испраќање на порака до скрипта, кој е некаде во средината на извршување, може да се испрати порака на скрипта која чека да започне. Ние го правиме ова со тоа што на риба емитува настан, еден ние ќе јавете се јаде. Потоа, ќе се создаде скрипта за вулгарен puffs кои ќе чекаат за овој настан. Ова е слично на просторот бар настан, освен дека овој време, корисникот не е оној директно активира на настанот. Сега сите ние треба да направите е да поставите нашите foodFound променлива назад на false, а ние сега може да се даде на гладни риби како многу порции на вулгарен puffs како што сака. Значи не е премногу лошо, нели? Во C, пишување мулти-навој програми е посложена, но основите се исти. Како и да е, се надевам дека имаат многу време градење на некоја забава истовремени програми во нула. Моето име е Нејт Hardison. Ова е CS50.