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