On 5/8/06, Robert Jordan <[EMAIL PROTECTED]> wrote:
P. Oscar Boykin wrote:
> If anyone else has some good pointers on how to use one socket to send and
> receive without polling or using the asynchronous methods I would be happy
> to learn of them (polling introduces latency and the asynchronous methods
> often lead to deadlocks I guess due to their internal use of threadpools).
Supposing the reads & writes are highly interdependent, using
asynchronous methods is the fastest way. Having separate threads
for reading and writing needs thread synchronization and leads
to a context switch.
The async methods used by the Socket class are handled differently
by the runtime. They are not invoked from the generic TP. The Socket
IO is handled by a specialized thread using AIO APIs.
Is this really true? I assume you mean posix aio methods? When I look in the mono source I can't find where this is happening. Am I missing it? It appeared to me that the asynchronous methods were being implemented with threading in mono and the standard synchronous socket calls.
Can you provide a reference (file names/line numbers) for the aio code in mono?
BTW, the TP issues have been fixed in the meanwhile:
http://www.mono-project.com/Article:ThreadPool_Deadlocks
(see "Long Term Solutions" )
Yeah I have seen that, but when I start many asynchronous calls (30-50) between many sockets in many different threads which are sending a lot of data back and fourth, I get problems which I don't get if I work with Socket.Poll (it appears some of the threads are deadlocked). I know that's a vague statement and not sufficient for a bug report, but I am still dubious that the asynchronous code is robust enough to be used in my setting (P2P code used in research).
Best Regards,
--
P. Oscar Boykin http://boykin.acis.ufl.edu
Assistant Professor, Department of Electrical and Computer Engineering
University of Florida
_______________________________________________ Mono-list maillist - [email protected] http://lists.ximian.com/mailman/listinfo/mono-list
