What is Kilim?
Kilim is a message-passing framework for Java that provides ultra-lightweight threads and facilities for fast, safe, zero-copy messaging between these threads.
It consists of a bytecode postprocessor (a "weaver"), a run time library with buffered mailboxes (multi-producer, single consumer queues) and a user-level scheduler and a type system that puts certain constraints on pointer aliasing within messages to ensure interference-freedom between threads.
Hardware facilities are getting distributed, from the micro to the macro levels -- increasing numbers of cores, CPUs in a box, boxes in a data center to a multitude of data centers. The current crop of software architectures, languages and idioms are not suited to this trend. Here are a few reasons:
- A multi-core/CPU box is internally a distributed system, but operating systems and hardware manufacturers go to great lengths to provide an illusion of local shared memory. In reality, the illusion is never complete, which is why programmers have no option but to learn about non-trivial memory models and consistency schemes.
- The problems with shared memory has been well documented [ PDF ].
- Different mindset between "concurrent programming" and "distributed programming". Programmers have to deal with both (even embedded systems have network interactions) and require separate sets of tools for verification, profiling and debugging these two patterns.
- The "events vs. threads" debate unnecessarily conflates two problems: threads are considered bad because they are (a) heavyweight (which doesn't have to be the case) and (b) the thread paradigm is implicitly associated with shared memory locking constructs that are error-prone, which again does not have to be the case. As Kilim demonstrates, it is possible to have lightweight threads that are just as lightweight as state machines, yet provide the automatic stack management feature (there's no need for the "return to the mainloop" mentality).
The software is released under a MIT-style open source license. I have removed the isolation type system from this version because I've decided to rewrite it.
Sources+docs+bugs on github: kilim-0.7.2
Discussions at the kilimthreads google group
Please send feedback, suggestions, fixes to kilim @ malhar.net.
Kilim: Isolation-Typed Actors for Java. [ pdf ]
Sriram Srinivasan, Alan Mycroft
European Conference on Object Oriented Programming ECOOP 2008, Cyprus.
A Thread of One's Own. [ pdf ]
New Horizons in Compilers Workshop, HIPC, Bangalore 2006