logo logo
Inicio arrow Portada
Thursday, 02 de September 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
Contenido Reciente
Próximos Eventos
24.Sep. 2010

Neuronal Dynamics Approaches to Cognitive Robotics
Bochum. Germany
08.Oct. 2010

Third EUCogII Members Conference
Palma de Mallorca, 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
Más
Preferidos
Lista MCexperts
Preguntas FAQ
Glosario
Mapa Web
   
ConsScale
   

MC-Papers: Base de datos de artículos de Conciencia Artificial

ConsScale: Una escala para medir el desarrollo de la conciencia en agentes artificiales (www.ConsScale.com)

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 (93) | Cite este artículo en su sitio | Views: 3677 | 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. Urbi se convierte en Software Libre
  8. Microsoft Robotics Studio Octubre 2006 CTP
  9. Microsoft Robotics Studio Noviembre 2006 CTP
  10. Robotics Studio 1.0 Liberado


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
Encuestas
¿Puede Ser Consciente un Robot?
 
Categorías
Mensajes en el Foro
 
CR
miel continental