Tengo entendido que la mayor parte de los sistemas operativos tienen
un limite de entre 256 y 1024 threads, e incluso algunas versiones de
linux soportan 8192 threads y no tienen problemas de desempeño.
Pero una vm de smalltalk debe tener unos 5000 objetos activos (no lo
he revisado pero no creo que pueda tener menos), y un seaside con 10
mil conexiones activas se iría de espaldas rapidamente usando tu
diseño.
Si queremos tener arquitecturas escalables, debemos limitar el uso de
recursos que a nivel del sistema operativo son limitados.
A todo esto, tu diseño parece que podría de manera trivial publicar
objetos para ser llamados de manera remota. ?lo haz intentado?
Saludos,
Guillermo Schwarz.
El 06-10-2010, a las 11:18, Angel Java Lopez <[email protected]>
escribió:
Hola gente!
Guillermo, me parece interesante ponerlo ya a nivel de la
expresividad de un lenguaje, que esa conducta "envio mensaje y sigo
con mis cosas" se vea como natural, ya puesto en el mensaje. Podria
implementar eso directamente en el proceso de mensaje de agente1,
para que sea transparente para el llamador, pero me parecio
interesante (me tomo menos de una hora, usando TDD) directamente
ponerlo en la VM.
Los threads en .NET son, digamos, logicos. Lo mismo, que recuerde,
en Java. Las VM luego mapearan los threads a lo que haya disponible
en los sistemas operativos, hardware, y demas que se encuentren hoy
o el dia de maniana. Bloquear un thread, no lo deja "ocupado". Y aun
los threads de un sistema operativo, son, digamos, virtuales. Lo
real es la asignacion de un thread a un procesador. Lo que si
consume un thread es memoria en algun lado, para mantener su estado,
aun cuando este suspendido. Pero imagino que la parte del leon, en
eso, se la lleva el proceso, mas que el thread.
Puedo copiar objetos, pero la idea es: si copio objetos y los coloco
en la misma maquina, puedo mejorar algo el rendimiento de la
aplicacion. Pero mas interesante de explorar, es copiar los objetos
en OTRAS maquinas, de forma que sea transparente
agente1 doSomething: param1 with: ....
que agente1 este local o remoto. Por supuesto, el programador de la
aplicacion debera ver que esa llamada tiene un costo. Pero mi idea,
es que si el agente1 es local o remoto, sea algo que se decida en
otro lado del codigo (o configuracion), sin tener que cambiar el
codigo de la aplicacion. De esta forma, puedo probar un algoritmo,
aplicacion, de forma local, y luego, comenzar a distribuirla y hacer
escalamiento horizontal. El ejemplo que uso es un Web Crawler. Ahi
en las referencias que envia, habia algunas implementaciones.
Tambien, la idea (tengo algo en AjSharp implementado) es que agente1
en realidad, sea local, y haga una especie de load balancing con
varios objetos remotos. Por ejemplo, en un web crawler, podria enviar
downloader downloadUrl: ´http://mycompany.com´
y downloader por abajo, envia ese trabajo (bajar tal pagina) a si
mismo, o enviarlo a cualquiera de los 400 downloaders que tendria en
mi laboratorio... mmmbuajjajaja... :-)
Tanto AjSharp como AjTalk (y otros Aj ... :-)... como AjBasic,
AjGenesis, AjLisp, AjProlog....), se pueden reimplementar en Java:
practicamente no estoy usando nada especial de .NET, por ahora. Por
ejemplo, cuando comence a escribir algunos de esos, en .NET tenia
Generics y en Java todavia no: y no use generics, recien ahora lo
estoy usando minimamente. En el caso de objetos distribuidos, si,
hay algo que uso para hacerlo rapido: Remoting binario en .NET,
tendria que investigar el estado del arte de la serializacion en Java.
Nos leemos!
Angel "Java" Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez
2010/10/6 Guillermo Schwarz <[email protected]>
Autopoyesis es copia, no autoorganización. Que conduzca a la autoorg
anización es otra cosa.
¿Como es eso de que te llamas Angel Java Lopez e implementas un Smal
ltalk asíncrono en C#? ;-)
¿Porqué no usas colas de mensajes y un colocas los objetos sobre un
thread en la medida que lo van necesitando? Sí, lo de lo mensajes lo
hiciste, y lo del watermark (que se queden pegados los enviadores c
uando se llena la cola también), lo interesente es que los objetos e
nviadores se queden bloqueados pero los threads no, para reutilizar
los threads con otros objetos.
(Eventualemtne sospecho que los sistemas operativos harán esto, pero
en el intertanto...)
Podrías además crear copias de los objetos que reciben los mensajes
para que operen más rápido. Claro que todo esto serían un overkill
si no lo aplicas en algo que lo necesite, como por ejemplo pdoría se
r en slashdot.
Saludos,
Guillermo.
2010/10/6 Angel Java Lopez <[email protected]>
Hola gente!
El termino autopoyesis me parece innecesario, ya estaba el termino
autoorganizacion. Con eso basta. Hmmm... supongo que el clasico a
leer sobre la vida, es el clasico de Monod, Azar y Necesidad.
Supongo que un tema relacionado a intencionalidad en organismos y
evolucion biologica, seria teleologia. Leeria ahi a Ernst Mayr, que
distingue varias acepciones de esa palabra.
Con respecto a los mensajes y su envio, en este thread Valloud habia
mencionado algo como "un objeto envia un mensaje a otro, y se queda
esperando la respuesta". Siempre me parecio interesante ir a
explorar otro camino "un objeto envia un mensaje a otro" y ya esta.
Es asi como funcionan las partes de los sistemas vivos.
En mi caso, lo estoy implementando en mi VM pet project, AjTalk [1].
Tengo algo como
Object agent:....
en lugar
Object subclass:....
Lo llame agent como podria llamarlo de otra forma. Entonces, los
objetos de esa clase que se define, tienen metodos, todo igual, pero
cuando uno envia un mensaje tipo
agente1 msg: par1 with: ... "o lo que sea"
el enviador del mensaje no se queda esperando la devolución. Y el ob
jeto agente va atendiendo los mensajes que le llegan de a uno (actua
lmente, en un thread aparte, para cada agente, pero podria cambiar l
a implementacion). También implementé que la cola de mensajes del a
gente, tenga un tamaño limitado, asi si hay varios que producen mens
ajes para ese agente, y la cola de mensajes se llena, automaticament
e se van suspendiendo a los threads/procesos del objetos enviadores,
reanundando su actividad ni bien tienen lugar en para dejar su mens
aje en la cola de mensajes del agente. Espero producir asi una auto-
regulacion de las velocidades de produccion y atencion de los mensaj
es.
La idea, es conseguir tambien objetos y agentes distribuidos, como
en AjSharp [2], en varias maquinas. Pero para eso me falta un
poco... :-)
[1] http://code.google.com/p/ajtalk
[2] http://ajlopez.wordpress.com/category/ajsharp/
Nos leemos!
Angel "Java" Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez
2010/10/6 Guillermo Schwarz <[email protected]>
Suena a que tiraste la toalla.
Lo de la intencionalidad está bien para los seres humanos, pero en e
l caso de la naturaleza en vez de intencionalidad hay oportunidad (n
ichos ecológicos) que son llenados por elementos con autopoyesis http://culturitalia.uibk.ac.at/hispanoteca/lexikon%20der%20linguistik/ao/AUTOPOIESIS%20Autopoyesis.ht
m
Esto es interesante para el punto en discusión porque al ser Alan Ka
y un biólogo molecular y al tratar de modelar los objetos como si fu
eran células que responden a mensajes, la idea era que el comportami
ento "emergiera". Esto es también uno de los objetivos de eXtreme Pr
ogramming, que emerja la auto-organización del programa, por más ext
raño que resulte para una visión donde todo tiene intencionalidad.
Un ejemplo de la vida real en el mundo del software son los
proyectos open source. No existe una autoridad central que los
organice y sólo en la medida que van teniendo éxito (más gente los
usa) van mejorando. Desde el punto de vista de la "intencionalidad"
eso no podría funcionar nunca, ni los wikis, etc.
Saludos,
Guillermo.
On Tue, Oct 5, 2010 at 11:14 PM, Andres Valloud <[email protected]
> wrote:
> Si todas las cosas dependen de las intenciones, ¿dónde dejas la le
y de
> las consecuencias indeseadas (unintended consequences)?
No por querer volar logro despegar el chancho.
Andres.
--
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
http://www.clubSmalltalk.org
--
Saludos cordiales,
Guillermo Schwarz
Sun Certified Enterprise Architect
--
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
http://www.clubSmalltalk.org
--
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
http://www.clubSmalltalk.org
--
Saludos cordiales,
Guillermo Schwarz
Sun Certified Enterprise Architect
--
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
http://www.clubSmalltalk.org
--
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
http://www.clubSmalltalk.org
--
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
http://www.clubSmalltalk.org