Re: Millions of Threads ?
frankgerlach@gmail.com wrote:
I am thinking about a telecom application, which would potentially
handle millions of mobile
phones (J2ME) as clients. Of course, I need a server (J2SE), too.
The "easy" implementation uses TCP connections for the client/server
communication. Problem is that there are only 65000 sockets per IP
address of the server. I think I could solve that by configuring
multiple IP addresses per network card.
Still, two problems remain: Memory used by each TCP connection and by
the enormous number of threads (each client would have a server thread
for the "easy" implementation)
Because of all those issues I am considering the use of datagram
sockets and state machines (one per client) instead of one thread per
client. On the other hand, what is the difference between a state
machine called "Thread" and a "hand-crafted" state machine ? Both
consume memory, and maybe I could configure the JVM to allocate very
little memory per Thread.....
What do you think ? What is typically used in large telecoms
applications ?
I would say something like:
<1000 client : one thread per client
1000-10000 client : nio
>10000 clients : udp
Usually threads are mapped to OS threads and have a significantly
overhead.
With a million clients I think you should also worry about
horizontal scalability !!
Arne