Overlapped calls via NativeBoost [Was: Re: Single threaded Pharo IDE?]

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Overlapped calls via NativeBoost [Was: Re: Single threaded Pharo IDE?]

Igor Stasenko
On 11 May 2010 21:24, Schwab,Wilhelm K <[hidden email]> wrote:
> Sig,
>
> If you give us "overlapped calls," we'll make a statue of you.  I'll bring the chissels :)
>
So, start preparing them. :)
I need a feature request for it. How to make it convenient and what
protocol/api you thinking of
to make such calls.

I can describe the things, which we need under the hood for implementation:

- first, we need to create a common 'Native thread' class, which uses
a native routine which it will run in it.
So, you can create a donzens of native threads, each having own native
function, and may serve for various purposes,
not just for overlapped calls

- second , we need to add a bindings for native semaphores and mutexes
(so, we could generate a native code which can wait on them).

- for overlapped calls, we need a special thread routine which runs a
loop of following:

   - waits for 'action' native semapore
   - loads the arguments on stack and calls native function
   - stores the result on some 'results buffer'
   - signals 'result ready' interpreter's semaphore

now, at language side , to do an overlapped call, we need
 - push arguments on some 'overlapped call' buffer
 - store the function pointer to call etc.
 - signal the 'action' native semaphore, so our overlapped call worker
thread may proceed with call
 - wait for 'result ready' semaphore
 - fetch the result
 - return result.


I would say, that its not hard to implement, but first, we requires
some infrastructure before we can do it,
namely: implement a NativeThread, and NativeSemaphore

> On sockets, I'm not terribly worried about the blocking part: what I don't want is for the whole image to go under because of mis-typed URL or something.  In short, I'm worried about too much blocking, not the absense of it.
>
> Bill
>
>
>
> -----Original Message-----
> From: [hidden email] [mailto:[hidden email]] On Behalf Of Igor Stasenko
> Sent: Monday, May 10, 2010 6:21 PM
> To: [hidden email]
> Subject: Re: [Pharo-project] Single threaded Pharo IDE?
>
> 2010/5/11 Schwab,Wilhelm K <[hidden email]>:
>> Andrei
>> Having do-its block the UI is a feature, especially since you can
>> explicitly fork a new (Smalltalk) process to do the work.  What is
>> **NOT** acceptable (and I fear I will discover is "easy" to cause to
>> happen) is for DNS and socket operations that have been forked to block the main thread.
>>
> someone still has to do that for you, i.e. wait for a completion of blocking operation.
>
>> Dolphin has a feature called overlapped calls that allow external
>> functions to be executed on a new OS thread specifically to avoid
>> hanging the entire image.  There are restrictions and disclaimers even
>> then, and the default behavior is to block the UI.
>>
> Btw, its good that you mentioned this feature.
> Given that i have a full control, what happens with NativeBoost, i could create a native thread to serve for handling such 'overlapped' calls, and at image side, it will just put a process, which made a call into a waitable state, while other processes could still continue to run.
>
>
>> Bill
>>
>> ________________________________
>> From: [hidden email]
>> [mailto:[hidden email]] On Behalf Of
>> Andrei Stebakov
>> Sent: Monday, May 10, 2010 5:31 PM
>> To: [hidden email]
>> Cc: Adrian Lienhard
>> Subject: Re: [Pharo-project] Single threaded Pharo IDE?
>>
>>
>>
>> 2010/5/10 Mariano Martinez Peck <[hidden email]>
>>>
>>>
>>> 2010/5/10 Andrei Stebakov <[hidden email]>
>>>>
>>>>
>>>> I just started to use Pharo 1.0. So please bear with me since I may
>>>> not fully understand the full concept of the IDE. Sometimes the
>>>> whole IDE freezes indefinitely.
>>>
>>> Welcome ! we hope you enjoy ;)
>>>
>>>>
>>>> So questions:
>>>> 1) Looks like evaluating anything from the Workspace freezes the
>>>> whole UI for the time of execution. Is it a bug or a feature?
>>>
>>> More or less. Pharo has a green thread implementation. I will tell
>>> you what I understand. Green threads means, there is only ONE OS
>>> thread, and then, internally (in Smalltalk) there exists their own
>>> threads, scheduler, priorities, etc. The UI is just a process that is
>>> running, with a certain priority. Go to the world menu, then "Tools"
>>> -> "Process Browser". There you will see all the current processes
>>> with their priorities. You can notice the UI process.
>>>
>> But you must agree that it still looks fishy when your whole UI blocks
>> when you execute something lengthy (like new package install)...
>> Well, if the majority of Pharo users think that it's OK who am I to argue?
>> ;)
>>
>>
>>>  So...whatever you do here, it will be done inside that process. If
>>> you do normal things, then yes, I guess the UI freezes. However, you
>>> way want to launch another thread to do what you want and with a
>>> lower priority than the UI.
>>>
>>> Do this test: open a workspace and a transcript. In the workspace,
>>> evaluate:
>>>
>>> [ 1000 timesRepeat: [Transcript show: 'mariano'; cr] ] forkAt:
>>> Processor userBackgroundPriority
>>>
>>> there, you will see that you are able to use the ide, while the block
>>> of writing to Transcript is working "at the same time".
>>>
>>> Here the most important message is forkAt:    . fork just fork the
>>> block with the standard priority ("Processor activePriority"). If you
>>> want to specify the priority, you have to use forkAt:
>>
>> Yes, the [ HTTPSocket httpGet: 'http://www.pharo-project.org/home'] forkAt:
>> Processor userBackgroundPriority doesn't block the UI anymore...
>> If it's the way to go, shouldn't we have a "special non-blocking"
>> Workspace which does exactly this (or have an option to run your
>> Workspace command with a background priority)?
>>
>>>
>>>
>>>>
>>>> 2) Sometimes executing something freezes the UI indefinitely. Is
>>>> there a way to cancel the operation (other than restarting the image)?
>>>> Strangely in my case the IDE froze on evaluating HTTPSocket httpGet:
>>>> 'http://www.pharo-project.org/home'
>>>>
>>>
>>> Yes, Sockets are an example where sometimes they block the whole image.
>>> Are you behind a proxy ? do you have a timeout error after a while ?
>>> I have just tested and it also freezes for me in Mac OS. I have no idea.
>>> Maybe other can help.
>>
>> If I execute HTTPSocket httpGet: 'http://www.pharo-project.org/home'.
>> in a Workspace having a Transcript window open, I got a never-ending
>> messages in the Transcript window like:
>> "redirecting to http://www.cmsbox.com/errors/hostnotfound.html".
>> Yes, I am behind a firewall, but other urls work with the same command.
>>
>>
>>>
>>> But yes, usually (sometimes it doesn't work) there is a combination
>>> of keys that send a system interruption. Check this links:
>>>
>>> http://wiki.squeak.org/squeak/899
>>> http://wiki.squeak.org/squeak/1542
>>>
>> Great! Alt-. works.
>>>
>>> BTW Adrian, I think this deserves a FAQ entry as it has been asked
>>> several times.
>>>
>>> Cheers
>>>
>>> Mariano
>>>
>>>>
>>>> Thank you,
>>>> Andrei
>>>>
>>>> _______________________________________________
>>>> Pharo-project mailing list
>>>> [hidden email]
>>>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>>>
>>>
>>> _______________________________________________
>>> Pharo-project mailing list
>>> [hidden email]
>>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>>
>>
>> _______________________________________________
>> Pharo-project mailing list
>> [hidden email]
>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>>
>
>
>
> --
> Best regards,
> Igor Stasenko AKA sig.
>
> _______________________________________________
> Pharo-project mailing list
> [hidden email]
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
> _______________________________________________
> Pharo-project mailing list
> [hidden email]
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>



--
Best regards,
Igor Stasenko AKA sig.

_______________________________________________
Pharo-project mailing list
[hidden email]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project