08.02.2015 Views

Programação Funcional e Concorrente com Scheme

Programação Funcional e Concorrente com Scheme

Programação Funcional e Concorrente com Scheme

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

notas de aula - Jerônimo C. Pellegrini<br />

( 1)<br />

*** ERROR ... mailbox receive timed out<br />

(thread-receive 0)<br />

Um processo criado por outro nó <strong>com</strong> spawn pode fazer mais que mandar mensagens<br />

de volta: ele pode executar código arbitrário no outro nó:<br />

( define h<br />

( spawn<br />

( lambda ()<br />

( print ’( ola mundo )))))<br />

O programa acima mostrará a lista (ola mundo) na current-output-port do nó h.<br />

O procedimento remote-spawn cria um processo em outro nó (que pode estar em<br />

uma CPU diferente):<br />

B> (node-init (make-node "host-B"30000))<br />

A> (define outro (make-node "host-B"30000))<br />

A> (remote-spawn B (lambda () (print "Olá do outro lado!")))<br />

A string será mostrada no current-output-port do REPL no host B, mas o processo<br />

em A não esperará que o processo remoto termine.<br />

13.3.1 Facilidades de alto nível<br />

Embora seja possível construir programas usando apenas as primitivas , !, spawn e<br />

remote-spawn, há procedimentos que oferecem maneiras mais convenientes de processar<br />

mensagens.<br />

13.3.1.1 Processamento seletivo de mensagens<br />

Versão Preliminar<br />

O procedimento processa mensagens seletivamente: escolhe, na caixa de entrada, uma<br />

mensagem que satisfaça algum critério. Por exemplo,<br />

Se as seguintes mensagens forem enviadas à caixa postal de um processo:<br />

[ 27 de outubro de 2010 at 15:47 ]<br />

299

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!