On Sun, May 29, 2011 at 4:06 AM, Levente Uzonyi leves@elte.hu wrote:
On Sat, 28 May 2011, Mariano Martinez Peck wrote:
What are the errors that I must avoid making ?
AFAIK SqueakDBX uses FFI which to my understanding means that it calls block the entire VM. That reduces the amount of concurrency a single image can handle. It also makes a connection pool more important.
Yes, FFI blocks the whole VM while a functions is being called. However,
if and only if the database client library supports asynchronous queries, SqueakDBX will work asynchronously. Basically, we do a loop where we ask the backend if the query was ready. If it was not, we do a yield (we let other process of the image to run) and then continue the loop.
FYI: The expression "Processor yield" doesn't let all processes run, just those which have the same priority. So using it in a loop starves all lower priority processes and results in busy waiting.
Thanks. I was not clear. What we actually do is:
(code = OpenDBX resultTimeout) ifTrue: [ (Delay forMilliseconds: (aQuerySettings timeout asMiliseconds)) wait ].
Is that better? Even if it lets just run processes of the same priority, this is good anyway because what we want is at least be able to process other queries. Probably, those other processes are being done from other Process.
Thanks
Mariano
Levente
http://www.squeakdbx.org/documentation/Asynchronous%20queries
Eliot implemented a multi-threaded FFI for Cog but so far I am not sure if it is already working.
Cheers
-- Mariano http://marianopeck.wordpress.com
seaside mailing list seaside@lists.squeakfoundation.org http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
squeakdbx@lists.squeakfoundation.org