logo logo
Inicio arrow Portada
Thursday, 11 de March de 2010
 
 
Español
Menú Principal
Inicio
Robots Conscientes...
Técnicas de IA...
Neurociencia...
Científicos...
Publicaciones...
Análisis...
Bibliografía CA
Robotics Studio...
Foros...
Blog...
Portada
Próximos Eventos
13.Mar. 2010

Máquinas y Robots del Futuro
Madrid
29.Mar. 2010

AISB 2010
Leicester, UK
12.Abr. 2010

Toward a Science of Consciousness 2010
Tucson, Arizona
22.Abr. 2010

Retecog Workshop
Madrid, Spain
24.Jun. 2010

ASSC 14
Toronto. Canada
14.Jul. 2010

BICS 2010: Brain-Inspired Cognitive Systems
Madrid, Spain
Etiquetas
Análisis Artificial Científicos Conciencia Conciencia Artificial Conferencias Consciencia Consciencia Artificial Consciousness Developer Documentación Documentation Español Investigación Investigadores Publicaciones Reviews Robotics Robots Spanish Studio VPL artificial conciencia
Destacados
Contenido Reciente
Más
Preferidos
Lista MCexperts
Preguntas FAQ
Glosario
Mapa Web
Introducción a CCR (Concurrency and Coordination Runtime) - Introducción al CCR Imprimir E-Mail
escrito por Ana Santos y Raúl Arrabales   
Wednesday, 30 de January de 2008
Índice
Introducción al CCR
Un Ejemplo Sencillo
Inicialización del CCR
Patrones Simples
Ejemplo de Interleave

Podemos incluir otro ejemplo, en el que se ve la utilidad de Arbiter.Interleave:


class SampleService
{
   Dispatcher dispatcher =
new Dispatcher(0, "Sample Service");
   DispatcherQueue taskQueue =
new DispatcherQueue();
   Port<
string> pState = new Port<string>();
   ServicePort pMain =
new ServicePort();
  
   ServicePort InitStatefull()
   {
        dispatcher.AddQueue(taskQueue);
        pState.Post(
"Hello");
        Arbiter.Activate(taskQueue,
        Arbiter.Interleave(
          
new TeardownReceiverGroup(Arbiter.Receive(false, pMain, Shutdown)),
          
new ExclusiveReceiverGroup(Arbiter.Receive(true, pMain, Update)),
          
new ConcurrentReceiverGroup(Arbiter.Receive(true, pMain, GetState)))
        );
      
return pMain;
   }
}


En este ejemplo vemos que se han seguido los mismos pasos que en el ejemplo anterior. La diferencia es que añadimos un método (InitStatefull()) que devuelve un objeto de la clase ServicePort y en él usamos Arbiter.Interleave, que nos proporciona garantías de protección hasta que el proceso halla terminado. Los tres parámetros que toma Interleave son:

- TearDownReceiverGroup: se añaden las tareas que hay que realizar sólo una vez al terminar todo.

- ExclusiveReceiverGroup: se ponen las tareas que se tienen que ejecutar en serie (sin concurrencia).

- ConcurrentReceiverGroup: se ponen las tareas que se pueden ejecutar en paralelo sin problemas (porque no tienen dependencias de datos entre ellas).

Un ejemplo más concreto del uso de Interleave sería el siguiente:


Port<WebResponse> responsePort = null;
Port<Exception> failurePort = null;
for (Int32 n = 0; n < c_ImageUrls.Length; n++)
{
   WebRequest webReq = WebRequest.Create(c_ImageUrls[n]);
   ApmToCcrAdapters.GetResponse(webReq, ref responsePort, ref failurePort);}

   Arbiter.Activate( dq, Arbiter.Interleave(
      
       new TeardownReceiverGroup (Arbiter.Receive (false, failurePort, delegate(Exception e)
                   {Msg("At least 1 GetResponse failed");})),

       new ExclusiveReceiverGroup(),

       new ConcurrentReceiverGroup(Arbiter.Receive(true, responsePort,delegate(WebResponse response)
                  {Byte[] data = new Byte[response.ContentLength];
                   response.GetResponseStream().Read(data, 0, data.Length);
                   Msg("RequestUri={0}", response.ResponseUri); })
    )));


Podemos comprobar en este ejemplo que en la llamada al método Interleave tenemos los tres parámetros citados anteriormente. En concreto, primero se crea una instancia de TeardownReceiverGroup, que ejecutará el receptor de la clase Arbiter una vez acabado todo. Si saltara la excepción, mostraría un mensaje por pantalla: "At least 1 GetResponse failed". En cuanto al segundo parámetro: ExclusiveReceiverGroup, no incluye ninguna tarea para ser ejecutada. Por último, el parámetro ConcurrentReceiverGroup, ejecutará el receptor del puerto de respuesta (responsePort), que no tiene dependencia con ningún dato.


Comparte tus dudas, comentarios o sugerencias en el Foro de Robotics Studio en Español.

 


Add as favourites (86) | Cite este artículo en su sitio | Views: 3284 | E-Mail

  Sea el primero en comentar el artículo
RSS de los comentarios

Solo los usuarios registrados pueden agregar sus comentarios.
Por favor, vaya a login, o regístrese.


Related Items:

  1. Jobs: Two Chair positions for new Centre for Computational Neuroscience and Co
  2. Cómo encontrar artículos sobre consciencia y robótica
  3. International Journal of Social Robotics
  4. Robótica Cognitiva y Conciencia Artificial
  5. Robótica Cognitiva
  6. Robots Polimórficos
  7. Microsoft Robotics Studio Octubre 2006 CTP
  8. Microsoft Robotics Studio Noviembre 2006 CTP
  9. Robotics Studio 1.0 Liberado
  10. Simulador RoboCup para Robotics Studio


Modificado el ( Friday, 01 de February de 2008 )
 





¿Recuperar contraseña?
¿Quieres registrarte? Hazlo aquí
 Conscious Robots RSS FeedFuente RSS de Conscious Robots

Encuéntranos en Facebook

Síguenos en TwitterSíguenos en twitter
Destacamos

Base de datos Bibliográfica sobre Conciencia Artificial

 

ConsScale 
La Escala para medir la Conciencia Artificial

 
Encuestas
¿Puede Ser Consciente un Robot?
 
Categorías
Mensajes en el Foro
 
CR
miel continental