On 11 May 2010 21:24, Schwab,Wilhelm K <bschwab@anest.ufl.edu> 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: pharo-project-bounces@lists.gforge.inria.fr [mailto:pharo-project-bounces@lists.gforge.inria.fr] On Behalf Of Igor Stasenko Sent: Monday, May 10, 2010 6:21 PM To: Pharo-project@lists.gforge.inria.fr Subject: Re: [Pharo-project] Single threaded Pharo IDE?
2010/5/11 Schwab,Wilhelm K <bschwab@anest.ufl.edu>:
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: pharo-project-bounces@lists.gforge.inria.fr [mailto:pharo-project-bounces@lists.gforge.inria.fr] On Behalf Of Andrei Stebakov Sent: Monday, May 10, 2010 5:31 PM To: Pharo-project@lists.gforge.inria.fr Cc: Adrian Lienhard Subject: Re: [Pharo-project] Single threaded Pharo IDE?
2010/5/10 Mariano Martinez Peck <marianopeck@gmail.com>
2010/5/10 Andrei Stebakov <lispercat@gmail.com>
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 Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
-- Best regards, Igor Stasenko AKA sig.
_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project _______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
-- Best regards, Igor Stasenko AKA sig.