Thanks for pointing out this article.

This appears to be my problem:

When I have enough sockets waiting on a BeginReceive, I cannot do
any other Async method.  I guess the worker queue gets filled with the
BeginReceive calls, and then BeginSend calls cannot get through.

For our work, the limit of 25 ThreadPool threads waiting on tcp sockets
is just not going to work.

It seems like there are two options here:

1) Avoid Async socket operations for systems that need to scale to large
numbers.  Prefer Select I guess.

2) Reimplement the Async sockets to make sure they always use native
operating system asynchronous facilities.

I think you already said that in the 2.6 kernel, the Async Sockets use
the posix aio interface.

It seems like in linux 2.4 there is a means to get the kernel to send
signals a socket is ready for IO:

http://www.kegel.com/c10k.html#nb.sigio

What would be the issues with doing a 2.4 implementation using the
signals mechanism?

Best,
Oscar

On Fri, May 07, 2004 at 08:02:48PM +0200, Gonzalo Paniagua Javier wrote:
> The default socket implementation for asynchronous methods uses the
> threadpool, which, by default, has 25 worker threads. If you use all of
> them bad things may happen. I wrote something about that:
> http://primates.ximian.com/~gonzalo/mono/blog/archives/2003_10.html
> 
> -Gonzalo
> 
> 
> _______________________________________________
> Mono-list maillist  -  [EMAIL PROTECTED]
> http://lists.ximian.com/mailman/listinfo/mono-list

-- 
[EMAIL PROTECTED]    http://pobox.com/~boykin    jabber: [EMAIL PROTECTED]
fingerprint=D250 4AD9 4544 B7D2 A17C  911D D608 D387 6718 D75F
Understand Free Software: http://www.gnu.org/philosophy/philosophy.html

Attachment: signature.asc
Description: Digital signature

Reply via email to