Hacker News new | past | comments | ask | show | jobs | submit login
Continuations and advanced flow control (ibm.com)
44 points by gnosis on Jan 13, 2012 | hide | past | favorite | 13 comments



There was a whole raft of discussions in 2006 on Lambda the Ultimate and elsewhere about using continuations for page flow in webapps, and ultimately the most persuasive argument (against) was that continuations implied linear flow whereas web-page flow could be non-linear, what with the back button, hyperlinks, and all that.

However, I think that continuations are still very cool, and are especially cool when they can be serialized or written to disk/transmitted/etc., because this essentially lets you "time/space-shift" your thread/process, since it's just bits.

Right now, "suspending" a process is something that happens when you close your laptop or pause a VM, but I think that being able to do this at a much more fine-grained level of detail is what will allow general cloud-based computation to really take off, because individual threads would be portable across computing environments.


Btw, it is possible to suspend Unix processes from the command line by sending them the SIGSTOP signal.

  ;playing a song with iTunes
  $ ps ax | grep iTunes
  401   ??  S      5:29.21 /Applications/iTunes.app/Contents/MacOS/iTunes -psn_0_213044
  $ kill -STOP 401
  ;the song stops playing, and iTunes's CPU usage drops to zero
  $ kill -CONT 401
  ;the song resumes exactly where it was
I've done this to, say, Firefox, and resumed it sometime later with no ill effects that I've been able to detect. (Firefox usually has a secondary Flash plugin process; the interaction between the two when one is suspended is kind of interesting, but seemingly benign.)

I've found this useful when I've wanted to throttle some application's CPU/other resource usage (usually on a laptop) but didn't want to completely quit it. Also it's just kind of awesome.


That is awesome! I wonder if the process could be read out via procfs and continued elsewhere?



There has been a whole bunch of approaches to this over the years, some of them kernel level and others in user space.

Search for "checkpoint restart" to find some links or start here: http://checkpointing.org/ It's all pretty dated though.

I did some work on it years ago but it's no longer maintained http://www.science.uva.nl/research/scs/Software/ckpt/ckpt.ht...


You could also do: kill -STOP `pidof iTunes`

(I have no idea if pidof is included in OSX. It exists in Debian systems though!)


Pidof does not seem to be included in 10.6. HomeBrew has it, MacPorts could not find it.


"killall -STOP iTunes" works well enough too.


Check out the paper "Modeling Web Interactions", it talks about using continuations to model web-based control flow: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.11.8...

PG has also done some work in this area: http://www.paulgraham.com/avg.html


i gave a lightning talk this week, maybe someone will find it helpful:

"lets make a blocking API not block. wait, what? (a practical introduction to continuations)"

https://docs.google.com/present/view?id=dv9r8sv_82cn7dngcq


Does logic programming really count as flow control? To me, it's an entirely different paradigm, where there is no real flow at all; all statements operate simultaneously.


Prolog might be a "logic programming" language, but the flow control is explicitly based on backtracking. Each possible solution for each statement is iterated, one at a time, and the results are fed into the next statements. The program is basically run as a search through the constraints in depth-first order. http://www.doc.gold.ac.uk/~mas02gw/prolog_tutorial/prologpag...


They don't operate simultaneously. Order is not defined in some constructs, but it's still there and can also be forced.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: