Menu

#41 Size limits on GThreads

open
nobody
None
5
2006-05-19
2006-05-19
Krishna
No

There is some unknown (at the moment, anyway), untested
size-limit to a GThreads, beyond which we get
communication exceptions and threads just don't get
executed. This must have something to do with settings
/ limitations of .Net Remoting. Will need to explore
this further and :
1. Either configure Remoting properly to allow larger
GThreads OR
2. Provide a seperate communication mechanism to
transfer the thread over, if GThreads are beyond a
certain limit (need to figure out the limit first!)
3. Automatically and transparently make this work with
the rest of the framework. i.e the user ideally
shouldn't have to handle the transfer himself/herself.

-- Krishna

---------------------------------
EXAMPLE: (and more info...)
---------------------------------
Submitted by : David Mitchell

Hi Krishna,

I'm experimenting with Alchemi and so far it is very
impressive. I've quickly run into a stumbling block
though. I have a string field on my Thread class which
typically will have very long threads in it (of the
order of tens of megabytes). When I run my application
I get the exception below. I have tried with hundreds
of threads, as well as only 20. It fails either way.
I've also tried splitting my strings up so the Thread
object has a string array of strings of length
~100,000. This still fails though. Do you have any
ideas? How do you recommend getting large amounts of
data to the executors?

Cheers
David

--
Error here:

ERROR: System.Net.Sockets.SocketException: An operation
on a socket could not be
performed because the system lacked sufficient buffer
space or because a queue
was full

Server stack trace:
at System.Net.Sockets.Socket.Receive(Byte[] buffer,
Int32 offset, Int32 size,
SocketFlags socketFlags)
at
System.Runtime.Remoting.Channels.SocketStream.Read(Byte[]
buffer, Int32 of
fset, Int32 size)
at
System.Runtime.Remoting.Channels.SocketHandler.ReadFromSocket(Byte[]
buffe
r, Int32 offset, Int32 count)
at
System.Runtime.Remoting.Channels.SocketHandler.Read(Byte[]
buffer, Int32 o
ffset, Int32 count)
at
System.Runtime.Remoting.Channels.Tcp.TcpFixedLengthReadingStream.Read(Byte
[] buffer, Int32 offset, Int32 count)
at System.IO.BinaryReader.ReadBytes(Int32 count)
at
System.Runtime.Serialization.Formatters.Binary.__BinaryParser.ReadArrayAsB
ytes(ParseRecord pr)
at
System.Runtime.Serialization.Formatters.Binary.__BinaryParser.ReadArray(Bi
naryHeaderEnum binaryHeaderEnum)
at
System.Runtime.Serialization.Formatters.Binary.__BinaryParser.Run()
at
System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(He
aderHandler handler, __BinaryParser serParser, Boolean
fCheck, Boolean isCrossAp
pDomain, IMethodCallMessage methodCallMessage)
at
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize
(Stream serializationStream, HeaderHandler handler,
Boolean fCheck, Boolean isCr
ossAppDomain, IMethodCallMessage methodCallMessage)
at
System.Runtime.Remoting.Channels.CoreChannel.DeserializeBinaryResponseMess
age(Stream inputStream, IMethodCallMessage reqMsg,
Boolean bStrictBinding)
at
System.Runtime.Remoting.Channels.BinaryClientFormatterSink.SyncProcessMess
age(IMessage msg)

Exception rethrown at [0]:
at
System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage
req
Msg, IMessage retMsg)
at
System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData&
msgDa
ta, Int32 type)
at
Alchemi.Core.IManager.Executor_GetThread(SecurityCredentials
sc, ThreadIde
ntifier ti)
at Alchemi.Executor.GExecutor.ExecuteThreadInAppDomain()
--

Discussion


Log in to post a comment.