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 |
Free forum by Nabble | Edit this page |