[Powered by Google Translate] NATE Hardison: Quando você tem vários programas abertos em um
computador, parece que está tudo
executando ao mesmo tempo.
Por exemplo, você pode estar trabalhando em um navegador web como
Firefox ou Internet Explorer, a ouvir música no iTunes,
e escrever uma redação com o Word.
No entanto, sob o capô, os programas realmente
executar um de cada vez.
É o trabalho do sistema operacional, o Windows, Mac OSX, ou
Linux, para administrar cada um destes processos separados, como o
programas são conhecidos, e alternar entre elas, de modo que quando você
ir de verificar a sua página no Facebook para trabalhar em seu ensaio
novamente, o Word é o único que está em execução.
>> Às vezes, porém, queremos programas de eles próprios poderem
fazer várias coisas como esta, também.
Se você é como eu, você provavelmente tem um monte de
abas diferentes aberto no seu navegador, um para e-mail,
um com um calendário, e assim por diante.
Poderíamos tratar cada aba como um programa separado ou processo,
como o Google Chrome faz, mas muitos programas usam um
peso-leve versão de um processo chamado de um fio.
>> Um segmento é apenas uma outra unidade de processamento, um conjunto de
instruções ou de código que podem "correr", fecha aspas,
simultaneamente com outros segmentos.
Isto é o que torna possível para você navegar no Facebook
ao ouvir-me no fundo ou ter dois
Vídeos do YouTube tocando ao mesmo tempo.
Assim, este tema geral, conhecido como concorrência, normalmente
não vem tão cedo nos cursos de ciência da computação
porque os detalhes de nível inferior requerem uma discussão de
sistemas operativos e outros semelhantes.
No entanto, a linguagem de programação que usamos na
início do CS50, Scratch, oferece algumas ferramentas legais para
torná-lo mais fácil de escrever programas com várias coisas
acontecendo ao mesmo tempo.
>> Quando você construir programas Scratch, você está constantemente
trabalhando com roscas.
Cada script Scratch, que é um bloco de código que começa com
um dos "quando" peças do puzzle, pode ser pensado
como um segmento separado.
Vejamos um programa simples arranhão para ver como isso funciona.
>> Aqui, temos um objeto, peixe ou sprite, com dois scripts
que tanto o início, quando clicamos no botão pequena bandeira verde.
O primeiro script controla o movimento do peixe.
Quando a bandeira verde é clicado, o peixe é colocado
no lado esquerdo do ecrã, o chamado estágio,
voltado para a direita.
Então, em um conjunto de instruções que vai correr para sempre, até que
parar o programa, o peixe desliza para o lado direito,
se vira, vai voltar para o lado esquerdo, e
se vira novamente.
O segundo script controla o processo do peixe pensamento.
Acontece que este é um peixe com fome.
Então, depois de esperar por 3 segundos, o peixe vai pensar,
"Estou com fome", para um segundo quarto.
Este script também funciona sempre.
E como podemos ver, com a execução do programa clicando no
bandeira verde, os dois scripts aparecer para executar
simultaneamente.
O peixe se e pensa ao mesmo tempo.
>> Desde o pobre peixe parece tão com fome, vamos acrescentar, em alguns
puffs de queijo para ele comer.
Esperamos que eles não se desintegram na água.
Quando adicionar um sprite segundo, nós também vamos ser capazes de
adicionar em scripts correspondentes a esse sprite.
E, portanto, haverá um outro conjunto de
tópicos que vai correr.
Para dar ao usuário de nosso controle sobre quando o programa
peixes com fome recebe comida, vamos dizer que sempre que o espaço
Bar é atingido, puffs queijo aparecer no palco para o
peixe para comer.
Antes de bater a barra de espaço, nós vamos querer manter o brega
puffs escondido para que o peixe não pode vê-los.
Para fazer isso, vamos precisar de um par de scripts para o
puffs sprites de queijo.
O primeiro roteiro, a bandeira verde, vai apenas esconder a comida.
Ao contrário dos outros scripts que nós escrevemos, este não irá manter
correr para sempre.
Ele vai começar e terminar muito rapidamente, certo quando clicamos
o botão de bandeira verde.
>> O próximo script, temos que esperar a barra de espaço para ser
pressionada antes de executar.
Podemos chamar de espera para entrada do usuário "espera" ou "escuta"
para um evento.
E o código que é executado quando um evento é recebido ou
ouvido é chamado código de manipulação de eventos.
Nosso Espaço manipulador de eventos Bar vai mostrar as baforadas de queijo em
a tela para que o peixe pode comer.
Neste ponto, tudo parece bom.
>> A próxima coisa que precisamos fazer é descobrir como chegar
o peixe para perceber que não há comida para comer.
Vamos adicionar uma outra linha para o peixe que constantemente
verifica se é ou não é tocando as baforadas de queijo.
Fazemos isso em um segmento separado desde que maneira podemos
verificar constantemente por comida.
Caso contrário, nós só será capaz de verificar periodicamente por comida
entre delta, girando em torno, esperando, ou pensando.
>> OK.
Agora vamos executar o nosso programa Scratch.
Como esperado, a comida imediatamente oculta e a
peixes com fome nada e para trás como antes.
Quando bateu a barra de espaço, os sopros de queijo entram em vista,
e os peixes com fome diz whoo.
Mas espere, isso é estranho.
Como é que o peixe "Estou com fome" interrompe o pensamento
outras coisas?
Isto é porque nós não estabeleceu qualquer coordenação
entre os três scripts de peixe.
Cada um é executado em seu próprio segmento, alheio ao que o
outros estão fazendo.
Vamos corrigir isso antes de seguir em frente.
>> A coordenação entre os segmentos é uma tarefa complicada, uma vez que
não tenha controle total sobre quando cada segmento é executado ou
não é executado.
Para enviar uma mensagem de um segmento para outro, nós vamos precisar
usar uma variável que pode definir, ou escrever, em uma thread
e ler na outra.
Vamos criar uma variável chamada foodFound que podemos definir a
verdadeiro quando o peixe corre para os sopros de queijo.
Bem, é claro, nós queremos ter certeza de que nós configurá-lo para
false inicialmente.
Em seguida, na linha do peixe pensamento, vamos verificar para ver se
o peixe encontrou comida antes de exibir o "estou com fome"
pensei bolha.
>> Agora, a execução do programa novamente, vemos que o peixe
não ficar interrompido com pensamentos de fome quando o
puffs de queijo estão fora.
O último problema que temos é que os sopros de queijo não vão
embora depois de o peixe, entre aspas, "come-los".
A partir dos scripts de peixe, não há nenhuma maneira fácil de esconder do brega
puffs, por isso precisamos enviar uma mensagem para os sopros de queijo
sprite para esconder-se.
Nós poderíamos fazer isso com outra variável que as baforadas de queijo
Sprite tem acesso, bem como o sprite peixe.
>> No entanto, há uma forma mais limpa de fazer isso neste caso,
pois em vez de enviar uma mensagem a um script que é
em algum lugar no meio da execução, podemos enviar o
mensagem a um script que está esperando para começar.
Nós fazemos isso por ter o peixe transmissão de um evento, um Nós
chamar comido.
Então, nós vamos criar um script para os sopros de queijo que vontade
esperar para este evento.
Isto é semelhante ao caso a barra de espaço, só que desta
tempo, o usuário não é o único diretamente acionando o evento.
Agora tudo o que temos a fazer é definir nossa volta variável foodFound
para false, e agora podemos dar o peixe com fome como muitos
porções de puffs de queijo como ele quer.
>> Então não é tão ruim, certo?
Em C, escrever multi-threaded programas é mais complicado,
mas os princípios são os mesmos.
De qualquer forma, eu espero que você tenha um grande momento a construção de um pouco de diversão
programas simultâneos em Scratch.
Meu nome é Nate Hardison.
Este é CS50.