[Mono-dev] Remoting and thread pool limits
pablosantosluac
pablosantosluac at terra.es
Sat Dec 15 05:49:34 EST 2007
Hi,
I've found the following difference working with .NET and Mono remoting. In
.NET when the remoting ThreadPool reaches the pool's maximum (25 threads per
process), it is able to continue creating new threads. In fact, you can end
up having a remoting server with hundreds of threads.
In mono the behaviour is different. Once the limit is reached it starts
refusing connections.
The other drawback of the standard (1.1) remoting (.NET) is that once the
thread pool limit is reached, each new thread takes a loooong time. In fact,
replacing the standard TCP channel by, for instance, the GenuineChannels
one, performance gets increased under heavy load.
The attached code creates a remoting server which implements one method. The
method is really simple:
public string GetVal()
{
Console.WriteLine("GetVal() - ThId:{0}",
Thread.CurrentThread.GetHashCode());
Thread.Sleep(1000);
return "Hi There";
}
Well, if you have a client launching 200 threads at the same time and
calling the server, it should take about 1 second to complete. Here are my
results using .NET (it doesn't finish with mono)
1 - Time 1102 ms
5 - Time 1011 ms
10 - Time 1002 ms
20 - Time 1011 ms
40 - Time 2003 ms
50 - Time 2013 ms
200 - Time 6019 ms
Using GenuineChannels (the difference here is how they implement the
threadpool), all get about 1 sec to finish.
Please find the sample code at
http://www.codicesoftware.com/testing/remotingtransmission.rar
Regards,
pablo
More information about the Mono-devel-list
mailing list