Tip:
Highlight text to annotate it
X
[Powered by Google Translate] NATE Хардісон: Коли у вас є кілька програм відкрити на
комп'ютер, здається, що все в
працює в той же час.
Наприклад, ви могли б працювати у веб-браузері, як
Firefox або Internet Explorer, прослуховування музики на ITunes,
і написання есе з Word.
Тим не менше, під капотом, насправді програм
запускати по одному за раз.
Це робота операційної системи, Windows, Mac OSX, або
Linux, для управління кожної з цих окремих процесів, а
Програми, як відомо, і перемикатися між ними, так що, коли ви
перейти від перевірки Facebook сторінки працювати на вашому есе
знову, Word є той, який працює.
>> Іноді, правда, ми хочемо самі програми, щоб мати можливість
зробити кілька речей, як це, теж.
Якщо ви схожі на мене, ви, ймовірно, є купа
різних відкритих вкладок в браузері, по одному для електронної пошти,
один з календарем, і так далі.
Ми могли б розглядати кожну вкладку як окремий процес або програму,
як Google Chrome робить, але багато програм використовують
полегшену версію процесу, який називається потоком.
>> Нитка це просто ще один блок обробки, набір
інструкцій або коду, який може "запустити", кінець цитати цитати,
одночасно з іншими потоками.
Це те, що дозволяє вам переглядати Facebook
Під час прослуховування мене у фоновому режимі або мати два
YouTube відео грає в той же час.
Таким чином, це загальна тема, відома як паралелізм, як правило,
не приходить так рано в курсах інформатики
тому що більш низькому рівні деталі вимагають обговорення
операційних систем тощо.
Тим не менше, мова програмування, ми використовуємо в
початок CS50, Scratch, надає деякі класні інструменти
полегшують написання програм з кількома речами
відбувається відразу.
>> Коли ви будуєте подряпин програм, ви постійно
робота з потоками.
Кожен подряпин сценарій, який є блок коду, який починається з
один з "коли" частини головоломки, можна розглядати
як окремий потік.
Давайте подивимося на просту програму нуля, щоб подивитися, як це працює.
>> Тут, у нас є рибу об'єкта, або спрайту, з двома сценаріями
що обидва початку, коли ми натисніть на маленьку зелену кнопку прапор.
Перший сценарій контролює рух риби.
Коли зелений прапор натискання, риба отримує поміщені
на лівій стороні екрану, званої стадії,
стикається з правого боку.
Тоді, в набір інструкцій, який буде працювати вічно, поки ми не
зупинити програму, риба ковзає на правій стороні,
обертається, повертається до лівої сторони, та
обертається знову.
Другий сценарій контролює розумовий процес риби.
Виявляється, що це голодна риба.
Таким чином, після очікування протягом 3 секунд, риба буде думати,
"Я голодний", на четвертій секунді.
Цей сценарій також працює вічно.
І як ми бачимо, від запуску програми, натиснувши
зелений прапор, як сценарії з'являються для виконання
одночасно.
Риба рухається і думає, що в той же час.
>> Оскільки бідні риба виглядає так голодний, давайте додамо в деяких
сирний клуби для того, щоб поїсти.
Сподіваюся, вони не будуть розпадатися в воді.
Коли ми додамо в другій спрайт, ми будемо також мати можливість
Додати в сценаріях, відповідних, що спрайт.
І, отже, там буде інший набір
потоків, які буде працювати.
Щоб дати користувачеві нашої програми контролю над коли
голодного риба отримує їжу, скажемо, що всякий раз, коли космічний
Бар удар, сирний клуби з'являються на сцені
риба є.
Перш ніж ми потрапили в Пробіл, ми хочемо зберегти паскудної
затягувань приховані, так що риба не може бачити їх.
Щоб зробити це, нам потрібно пару сценаріїв для
сирний клуби спрайту.
Перший сценарій, зелений прапор, буде просто приховати їжі.
На відміну від інших сценаріїв ми вже писали, цього разу не буде тримати
працює вічно.
Вона буде починатися і закінчуватися дуже швидко, право, коли ми натискаємо
Зелена кнопка прапор.
>> Наступний сценарій у нас буде чекати пробіл, щоб бути
натиснута перед виконанням.
Ми можемо назвати очікуванні введення користувача "очікування" або "слухає"
для події.
І код, який виконується при отриманні події або
чув називається код обробки подій.
Наші Space Bar обробник події покажуть сирний затяжок на
екран, так що риба може з'їсти їх.
На даний момент, все виглядає добре.
>> Наступне, що нам потрібно зробити, це з'ясувати, як отримати
Риба розуміти, що є їжа.
Давайте додамо інший потік для риби, яка постійно
перевіряє, чи є він чи ні зворушливо сирний затягувань.
Ми робимо це в окремому потоці, так як таким чином ми можемо
постійно перевіряти на продовольство.
В іншому випадку, ми б тільки мати можливість періодично перевіряти їжу
між ковзання, обертаючись, очікування, або думати.
>> OK.
Тепер давайте запустимо нашу програму до подряпин.
Як і очікувалося, їжа відразу ж ховається і
голодного риба плаває туди й назад як і раніше.
Коли ми потрапили в Пробіл, сирний клуби приходять в полі зору,
і голодних риб говорить Whoo.
Але почекайте, це дивно.
Як вийшло, що риба "Я голодний" перериває думки
інші речі?
Це тому, що ми не встановлює жодних координації
між трьома сценаріями риби.
Кожен працює у своєму власному потоці, не звертаючи уваги на те, що
роблять інші.
Давайте виправимо це, перш ніж рухатися далі.
>> Координація між потоками є непростим завданням, оскільки ми
не мають явного контролю над коли кожен потік працює або
не працює.
Щоб відправити повідомлення з одного потоку в інший, ми повинні будемо
використовувати змінну, що ми можемо встановити, ні писати, в одному потоці
і прочитати в іншій.
Давайте створимо змінну foodFound, що ми можемо встановити для
вірно, коли риба впадає в сирний затягувань.
Ну, звичайно, ми хочемо переконатися, що ми встановити його на
помилковим спочатку.
Тоді, в мисленні потік риби, ми будемо перевіряти, щоб переконатися,
Риба знайшла їжу перед показом "Я голодний"
думав міхур.
>> Тепер, запустивши програму знову, ми бачимо, що риба
не отримати перервав думки від голоду, коли
сирний клуби знаходяться поза.
Остання проблема у нас в тому, що сирний клуби не ходжу
ж після риби, процитувати кінець цитати, "з'їдає" їхній.
З риби скрипти, не існує простий спосіб приховати паскудне
затягувань, так що нам потрібно відправити повідомлення на паскудної клуби
спрайт заховати себе.
Ми могли б зробити це з іншої змінної, що сирний клуби
спрайт має доступ, а також риба спрайту.
>> Однак, є більш чистого способу зробити це в даному випадку,
так як замість відправлення повідомлення на скрипт, який
десь в середині виконання, ми можемо відправити
Повідомлення для сценарію, який чекає, щоб почати.
Ми робимо це, маючи риби транслювати подія, яку ми будемо
дзвоніть їли.
Потім, ми створимо скрипт для сирний клуби, які будуть
чекати цієї події.
Це схоже на події Bar простору, крім того, що це
час, користувач не той, безпосередньо запуск події.
Тепер всі ми повинні зробити, це встановити наш foodFound назад змінна
БРЕХНЯ, і тепер ми можемо дати голодному рибу, як багато
порцій сирний затягувань, як він хоче.
>> Так що не так вже погано, вірно?
У C, написання багатопоточних програм є більш складним,
але основи ті ж.
У всякому разі, я сподіваюся, ви чудово проведете час будівництва повеселитися
паралельних програм в Scratch.
Мене звати Нейт Хардісон.
Це CS50.