[Powered by Google Translate] NATE Hardison: Cuando tienes varios programas abiertos en un
computadora, parece que todo está
ejecutando al mismo tiempo.
Por ejemplo, usted podría estar trabajando en un navegador web como
Firefox o Internet Explorer, escuchar música en iTunes,
y escribir un ensayo con Word.
Sin embargo, bajo el capó, los programas de realidad
ejecutar uno a la vez.
Es el trabajo del sistema operativo, Windows, Mac OSX, o
Linux, para gestionar cada uno de estos procesos independientes, como la
programas se conocen, y cambiar entre ellos para que cuando
van desde el control de su página de Facebook para trabajar en su ensayo
de nuevo, la Palabra es la que se está ejecutando.
>> A veces, sin embargo, queremos propios programas para poder
para hacer varias cosas como esta, también.
Si eres como yo, probablemente tienes un montón de
abrir diferentes pestañas en el navegador web, una para correo electrónico,
uno con un calendario, y así sucesivamente.
Podríamos tratar cada pestaña como un programa independiente o proceso,
como Google Chrome lo hace, pero muchos programas usan un
más ligero de peso versión de un proceso llamado un hilo.
>> Un hilo es simplemente otra unidad de procesamiento, un conjunto de
instrucciones o código que puede "correr", entre comillas,
al mismo tiempo que otros subprocesos.
Esto es lo que hace que sea posible para que usted pueda navegar por Facebook
mientras escucha a mí en el fondo, o con dos
Los vídeos de YouTube jugar al mismo tiempo.
Por lo tanto, este tema general, conocido como la concurrencia, por lo general
no viene tan temprano en los cursos de ciencias de la computación
porque los detalles de nivel inferior requieren discusión de
sistemas operativos y similares.
Sin embargo, el lenguaje de programación que utilizamos en la
a partir de CS50, Scratch, proporciona algunas herramientas ingeniosas para
que sea más fácil escribir programas con múltiples cosas
sucediendo al mismo tiempo.
>> Cuando se genera programas Scratch, usted está constantemente
trabajar con hilos.
Cada secuencia de comandos de cero, que es un bloque de código que comienza con
una de las piezas del rompecabezas "cuando", se puede considerar
como un subproceso independiente.
Echemos un vistazo a un programa simple rasguño para ver cómo funciona esto.
>> Aquí, tenemos un objeto de pescado o sprite, con dos guiones
que ambos comienzan cuando hacemos clic en el botón pequeño bandera verde.
El primer script controla el movimiento de los peces.
Cuando la bandera verde se hace clic, el pescado se coloca
en el lado izquierdo de la pantalla, llamada la etapa,
frente a la derecha.
Luego, en un conjunto de instrucciones que se ejecutan encontrar siempre, hasta que
detener el programa, el pescado se desliza hacia el lado derecho,
se da la vuelta, se remonta a la izquierda, y
se da la vuelta otra vez.
El segundo script controla el proceso del pez pensamiento.
Resulta que este es un pez hambriento.
Así que después de esperar durante 3 segundos, el pescado va a pensar,
"Tengo hambre", durante un segundo cuarto.
Este script también se ejecuta siempre.
Y como vemos, al ejecutar el programa haciendo clic en el
bandera verde, aparecen dos guiones para ejecutar
simultáneamente.
El pescado se mueve y piensa al mismo tiempo.
>> Dado que el pobre pez se ve tanta hambre, vamos a añadir en algunos
bocanadas de queso para comer.
Es de esperar que no se desintegre en el agua.
Cuando añadimos un sprite en segundo lugar, también será capaz de
añadir en los scripts correspondientes a ese sprite.
Y, por lo tanto, no habrá otro conjunto de
temas que va a ejecutar.
Para dar al usuario el control de nuestro programa termina cuando el
pez hambriento consigue comida, digamos que cada vez que el espacio
Bar es golpeado, puffs cursi aparecer en el escenario para la
pescado para comer.
Antes de golpear la barra espaciadora, se querrá mantener el queso
puffs oculta para que los peces no pueden verlos.
Para ello, vamos a necesitar un par de guiones para la
puffs cursi Sprite.
El primer guión, la bandera verde, se acaba de esconder la comida.
A diferencia de las otras escrituras que hemos escrito, éste no se mantenga
funcionando siempre.
Se empezará y terminará muy pronto, justo cuando hacemos clic
el botón de bandera verde.
>> El script siguiente que tenemos que esperar a que la barra espaciadora para ser
presionado antes de la ejecución.
Podemos llamar a la espera de la entrada del usuario "a la espera" o "escuchar"
para un evento.
Y el código que se ejecuta cuando se recibe un evento o
oído se denomina código de control de eventos.
Nuestra barra espaciadora controlador de eventos mostrará las bocanadas de queso
la pantalla para que los peces se pueden comer.
En este punto, todo se ve bien.
>> Lo siguiente que tenemos que hacer es encontrar la manera de obtener
los peces para darse cuenta de que hay que comer.
Vamos a añadir otro hilo para los peces que constantemente
comprueba si es o no es tocar las bocanadas cursi.
Hacemos esto en un hilo separado ya que lo que podamos
comprobar constantemente por la comida.
De lo contrario, sólo sería capaz de comprobar periódicamente si hay comida
entre delta, dando la vuelta, esperando, o pensando.
>> Aceptar.
Ahora vamos a ejecutar nuestro programa Scratch.
Como era de esperar, la comida inmediatamente esconde y la
peces hambrientos se desliza hacia adelante y hacia atrás como antes.
Cuando se pulsa la barra espaciadora, las bocanadas cursi salir a la luz,
y el pez hambriento dice whoo.
Pero espera, eso es raro.
¿Cómo es que el pez "Tengo hambre" interrumpe el pensamiento
otras cosas?
Esto se debe a que no estableció ningún tipo de coordinación
entre los tres guiones de pescado.
Cada uno se está ejecutando en su propio hilo, ajeno a lo que el
otros están haciendo.
Vamos a arreglar esto antes de seguir adelante.
>> La coordinación entre los hilos es una tarea difícil ya que
no tienen control explícito sobre cuándo se ejecuta cada hilo o
no se ejecuta.
Para enviar un mensaje de un hilo a otro, tendremos que
utilizar una variable que se puede configurar, ni escribir, en un hilo
y leer en el otro.
Vamos a crear una variable llamada foodFound que podemos poner a
cierto cuando el pescado se encuentra con las bocanadas de queso.
Bueno, por supuesto, queremos asegurarnos de que lo establecido en
false inicialmente.
Luego, en el pensamiento hilo del pez, vamos a comprobar si
el pescado ha encontrado comida antes de mostrar el "tengo hambre"
pensamiento burbuja.
>> Ahora, al ejecutar el programa de nuevo, se ve que el pescado
no se interrumpe con pensamientos de hambre cuando el
queso puffs están fuera.
El último problema que tenemos es que las bocanadas cursi no van
desaparece después de los peces, citar fin de la cita, "se come" de ellos.
A partir de las secuencias de comandos de pescado, no hay manera fácil de ocultar el queso
puffs, así que tenemos que enviar un mensaje a los soplos con queso
sprite para ocultarse.
Podemos hacer esto con otra variable que las bocanadas cursi
sprite tiene acceso a, así como el sprite pescado.
>> Sin embargo, hay una forma más limpia de hacer esto en este caso,
ya que en lugar de enviar un mensaje a un guión que es
en algún lugar en el medio de ejecución, se puede enviar la
mensaje a un guión que está esperando para comenzar.
Hacemos esto haciendo que el pescado retransmitir un acontecimiento, que vamos a tratar
llamar comido.
A continuación, vamos a crear una escritura para las bocanadas cursi que la voluntad
esperar para este evento.
Esto es similar al caso de la barra espaciadora, excepto que esta
tiempo, el usuario no es el que directamente activa el evento.
Ahora todo lo que tenemos que hacer es configurar la espalda variable de foodFound
en false, y ahora podemos dar a los peces hambrientos como muchos
porciones de queso puffs como quiera.
>> Así que no es tan malo, ¿verdad?
En C, escribir programas multihilo es más complicado,
pero los fundamentos son los mismos.
De todos modos, espero que tengas un buen momento la construcción de un buen rato
programas concurrentes en Scratch.
Mi nombre es Nate Hardison.
Esto es CS50.