[33 total ]
Quartz is an enterprise-class job scheduler for integration with stand-alone Java applications and full-scale J2EE applications. Advanced features include clustering and participation in container managed transactions. It is highly scalable, very lightweight, and supports very complex scheduling.
Haskell is an advanced purely functional programming language. The product of more than twenty years of cutting edge research, it allows rapid development of robust, concise, correct software. With strong support for integration with other languages
... [More]
, built-in concurrency, debuggers, profilers, rich libraries and an active community, Haskell makes it easier to produce flexible, maintainable high-quality software.
GHC is a state-of-the-art, open source, compiler and interactive environment for Haskell. [Less]
Erlang is a programming language designed at the Ericsson Computer Science Laboratory. Ericsson released the entire source code of the Erlang system including extensive libraries of code for building robust fault-tolerant distributed applications.
Explicit and implicit parallel programming in Haskell, using parallel strategies and annotations.
ProActive is the Java GRID middleware library (with Open Source code under GPL license) for parallel, distributed and multi-threaded computing. ProActive is the GRID Application Server for the Enterprise.
With a reduced set of simple
... [More]
primitives, ProActive provides a comprehensive API to simplify the programming of Grid Computing applications: distributed on Local Area Network (LAN), on clusters of workstations, or on Internet GRIDs.
ProActive is only made of standard Java classes, and requires no changes to the Java Virtual Machine, no preprocessing or compiler modification, leaving programmers to write standard Java code. [Less]
Inferno® is a distributed operating system, originally developed at Bell Labs, but now developed and maintained by Vita Nuova® as Free Software. Applications written in Inferno's concurrent programming language, Limbo, are compiled to its portable
... [More]
virtual machine code (Dis), to run anywhere on a network in the portable environment that Inferno provides. Unusually, that environment looks and acts like a complete operating system.
The use of a high-level language and virtual machine is sensible but mundane. The interesting thing is the system's representation of services and resources. They are represented in a file-like name hiearchy. Programs access them using only the file operations open, read/write, and close. The 'files' may of course represent stored data, but may also be devices, network and protocol interfaces, dynamic data sources, and services. The approach unifies and provides basic naming, structuring, and access control mechanisms for all system resources. A single file-service protocol (called Styx or 9P2000) makes all those resources available for import or export throughout the network in a uniform way, independent of location. An application simply attaches the resources it needs to its own per-process name hierarchy ('name space').
The system can be used to build portable client and server applications. It makes it straightforward to build lean applications that share all manner of resources over a network, without the cruft of much of the 'Grid' software one sees.
Inferno can run 'native' on various ARM, PowerPC, SPARC and x86 platforms but also 'hosted', under an existing operating system (including FreeBSD, Irix, Linux, MacOS X, Plan 9, and Solaris), again on various processor types. [Less]
SwingWorker is a framework for implementing 'long running Swing GUI
interacting tasks'. This project is a back-port of SwingWorker from
Java (TM) 1.6 release to Java (TM) 1.5 release.
VOS is a library and network protocol for interlinked object structures, which can be easily distributed over networks. Notifications of changes are automatically sent to other applications/clients. VOS simplifies concurrent asynchronous
... [More]
programming, both within the same process or distributed over the network. Revision control (versions), access control, and other important features are built in. VOS object messaging also allows access from multiple languages.
VOS forms the basis for several applications including multiuser 3D virtual reality, web content management, and any other application requiring an infrastructure for distributed, dynamic data structures. A multipurpose GUI client application for a combined 3D/2D/WIMP browsing and development environment is available. [Less]
Software transactional memory: a modular composable concurrency abstraction
Distributed .Net Framework
Apache Commons Transaction implements multi level locks, transactional collections and transactional file access in Java.
This package provides head normal form strict versions of some standard Haskell concurrency
abstractions (MVars,Chans), which provide control over where evaluation takes place not offered by
the default lazy types. This may be useful for deciding
... [More]
when and where evaluation occurs, leading to
improved time or space use, depending on the circumstances. [Less]
Concutest is a collection of tools designed to make the development and testing of concurrent Java programs easier and more reliable. Concutest is freely available under the BSD License, and it is under active development by the JavaPLT group at Rice University.
The project Mandala helps the development of concurrent and/or distributed applications. It is based on the asynchronous reference concept which provide asynchronous and potentially remote method invocation.
Revactor implements the Actor model using Ruby 1.9's Fibers for concurrency and Rev for event monitoring. Revactor also provides tools for building Erlang-like services on top of Actors, including networking, transactional servers, and finite state machines.
Danga's Distributed Lock Daemon is a simple service that can be used to provide application-wide locking for applications that are deployed across multiple servers. It is based on libevent and runs as a single, lightweight process.
A variety of small Open Source projects for ColdFusion MX from Sean Corfield (An Architect's View).
Currently this project contains: CFEclipseFacade - a cfcUnit-compatible version of the CFC required by the CFUnit plugin Closures for CFMX -
... [More]
inspired by closures in a variety of languages Concurrency for CFMX - inspired by Java 5's concurrency package Edmund - Event-based programming for ColdFusion IRCBot Event Gateway - this is a CFMX Event Gateway that acts as a channel bot on IRC Scripting - PHP and Ruby execution enabled via custom tags
Other projects will be added over time.
For more information about this project, visit the individual home pages on RIAForge.org: Closures for CFMX Concurrency for CFMX Edmund - Event-Driven Model Framework Scripting for ColdFusion 8 [Less]
Allow JUnit tests to run in parallel for better CPU utilization.
Active ObjectThis is a simple example of the Active Object concurrency pattern. Example code is provided in both Ruby and Java.
See http://en.wikipedia.org/wiki/Active_Object
This is intended to be used in my talk on Active Object at the
... [More]
Melbourne Patterns group http://melbournepatterns.org/
The example is a contrived one of a domain name reseller selling .com, .com.au, and .co.nz domain names with the restriction that the respective domain name registries (or registrars) only allowing one connection at a time from the reseller.
Note that I assume a really simple FIFO scheduler and so do not supply a queue iterator on the Activation Queue, instead I just supply a dequeue method to take the first item off the queue, blocking if the queue is empty.
Directory structure: - examples: contains example usage in ruby of the classes defined in the other directories.
- classic: contains ruby classes needed for a classic implementation of Active Object where each "active object" consists
of a proxy (ActiveDomainNameRegistry) that has a reference to a single servant (DomainNameRegistry),
and a single scheduler (Scheduler), and the scheduler contains a single activation queue (ActivationQueue).
- variation: contains a variation (in ruby) of the pattern that allows multiple servants per activation queue
and is avoids being tied to a single type of servant by using method_missing.
- java: contains the sample example code in java [Less]
GrassyKnollGrassyKnoll is a search engine written in Python.
NewsThe Warren Commission has reconvened and development is active again. Huzzah! Interested parties should try the unhork branch. More slides from the talk at Barcamp Chicago on
... [More]
August 16 are up. Slides from the talk at the NYC Python User Group Meeting on June 17 are up. Version 0.4 is due out soon. This will be the first production-ready release. We had a great PyCon2008. Version 0.3 is out! Get it from the download page. HighlightsHigh-performance storage options: PyLucene, SQLite, DBM, Memcached A RESTful HTTP frontend Easy-to-use wire formats: JSON, HTML Clients in Python and Javascript A clean, powerful data model Lock-free Concurrency Extensive high-level and source code documentation A large suite of UnitTests Use CasesGrassyknoll can provide network-accessible search platform for applications such as: Database Search: add text search to your relational database Site Search: provide search this site functionality on your website Intranet Search: index all of your enterprise data Desktop Search: simultaneously index and search your laptop's documents, emails, etc. More!
Hot LinksInstall Grassyknoll Try the Tutorial ContactUs CIA Bot Available VersionsWant to try GrassyKnoll? Use the unhork branch. Development takes place on trunk. Note: trunk is kinda horked right now. Version 0.3 is an exploratory release. It is available from the downloads page. You can also get the source from subversion. It's fully functional but not production ready. [Less]
Jetlang provides a high performance java threading library. The library is based upon Retlang.
The library is a complement to the java.util.concurrent package introduced in 1.5 and should be used for message based concurrency similar to event based
... [More]
actors in Scala.
The library does not provide remote messaging capabilities. It is designed specifically for high performance in-memory messaging.
Basic Example // start thread backed receiver.
// Lighweight fibers can also be created using a thread pool
Fiber receiver = new ThreadFiber();
receiver.start();
// create java.util.concurrent.CountDownLatch to notify when message arrives
final CountDownLatch latch = new CountDownLatch(1);
// create channel to message between threads
Channel channel = new MemoryChannel();
Callback onMsg = new Callback() {
public void onMessage(String message) {
//open latch
latch.countDown();
}
};
//add subscription for message on receiver thread
channel.subscribe(receiver, onMsg);
//publish message to receive thread. the publish method is thread safe.
channel.publish("Hello");
//wait for receiving thread to receive message
latch.await(10, TimeUnit.SECONDS);
//shutdown thread
receiver.dispose();Browse the api [Less]
Esta es una Práctica de investigación para la asignatura de Sistemas Concurrentes de la Ingeniería Técnica en Informática de Sistemas de la ULPGC.
En ella vamos a mostrar un ejemplo de programación distribuida mediante el lenguaje de
... [More]
programación Ruby, y sus bibliotecas DRb y Rinda. Nuestro objetivo no es crear una aplicación útil para el MundoReal ni entrar en detalles de optimizacion y seguridad. Sin embargo, lo que si nos gustaría es reunir y ofrecer una base de conocimiento para que quien quiera pueda empezar a usar DRb y Rinda.
El problema sobre el que vamos a trabajar consiste en la implementacion de una granja de procesos para la ordenacion de vectores.
ComienzaAquiLaAventura [Less]
Lockless Multi-Reader, Multi-Writer Transaction Capable Hash Tables
This project hosts examples using Stackless Python and combined usage of stackless with PyQt, the bindings for Trolltech QT GUI library, Twisted framework and others.
Check the examples in the Examples Wiki or download them from the trunk in SVN
... [More]
repository.
The first examples came from the Stackless sandbox SVN repository, we hope to have this library increased and stackless python spread all around. [Less]
This project holds PowerPoint slides and code examples from presentations I have given.
AboutTermite Scheme is a variant of Scheme intended for distributed computing. It offers a simple and powerful concurrency model, inspired by the Erlang programming language, which is based on a message-passing model of concurrency.
There's a paper
... [More]
about Termite.
It runs on top of Gambit-C, a very nice Scheme system developed by Marc Feeley at Université de Montréal.
LicenseTermite is distributed under the terms of the LGPL license.
Installation#1 Install the latest version of Gambit-C
#2 Get the latest Termite and put it in Gambit's lib/ directory
$ cd /usr/local/Gambit-C/current/lib
$ svn checkout http://termite.googlecode.com/svn/trunk/ termite#3 Copy the tsi script to Gambit's bin directory (optional)
ContactQuestions and comments can be sent to Guillaume Germain (guillaume.germain at gmail.com). Please use Issues for feature request and bug reports. [Less]
The MultithreadedTC framework was created to make it easier to test small concurrent abstractions. It enables test designers to guarantee a specific interleaving of two or more threads, even in the presence of blocking and timing issues.
To learn
... [More]
more, please read this overview.
MultithreadedTC was created at the University of Maryland by Bill Pugh and Nat Ayewah. It has been used in a number of courses to test concurrent projects, and enable students to write their own test cases.
PublicationsWilliam Pugh and Nathaniel Ayewah, "Unit Testing Concurrent Software", IEEE/ACM International Conference on Automated Software Engineering, Atlanta GA, Nov 5-9, 2007. Short Paper (PDF), Poster (PDF) [Less]
A high performance version of java.util.LinkedHashMap for use as a software cache.
DesignA lock-free doubly linked list runs through a ConcurrentHashMap. Supports FIFO, LRU, and Second Chance eviction algorithms. StatusCode complete and passes all
... [More]
unit tests. Requires a new round of performance testing. To be provided as an alternative memory store for Ehcache. PerformanceThe performance data reflects an earlier prototype.
Efficency TestsApproach3 factor full factorial experiment of three cache replacement strategies.
Factor Levels Name Abbr1-1 Working Set Sizewss200002000 Cache Sizecs20020 Meanmn1000100
DataData Distribution: Rounded Exponential Experimental Results: Hit Rates wss cs mn fifo second chance lru 111.09.10.10 11-1.69.78.76 1-11.10.10.10 1-1-1.10.10.10 -111.09.09.09 -11-1.62.70.69 -1-11.01.01.01 -1-1-1.10.11.10
Allocation of Variation> fifo.lm$coefficients[2:8]2/sum(fifo.lm$coefficients[2:8]2) wss cs mn wss:cs wss:mn cs:mn wss:cs:mn 0.00637704260.34685133520.37076524510.00009964130.00009964130.26943005180.0063770426
> second_chance.lm$coefficients[2:8]2/sum(second_chance.lm$coefficients[2:8]2) wss cs mn wss:cs wss:mn cs:mn wss:cs:mn 5.526341e-033.485037e-13.694617e-11.912229e-51.721006e-42.707907e-15.526341e-3
> lru.lm$coefficients[2:8]2/sum(lru.lm$coefficients[2:8]2) wss cs mn wss:cs wss:mn cs:mn wss:cs:mn 5.765356e-33.528837e-13.635765e-11.994933e-51.795440e-42.730864e-14.488599e-3
ObservationsSecond Chance always provides the best or comparable hit rates. Second Chance combines strengths of FIFO and MFU cache strategies. Two factors and their interaction account for most of the variation for all replacement strategies. policy size mean size:mean fifo34.7%37.1%26.9% second chance34.9%36.9%27.1% lru35.3%36.4%27.3%
Concurrency TestsAverages are performed over 10 runs, with the upper/lower 10% dropped. When contention is forced threads yield after an operation. Each thread performs 200,000 operations against the cache. The cache has a total capacity of 5,000 entries. The cache is cleared after test execution. Twenty threads execute in parallel. Tested with Ehcache v1.40. Implementation Description UNBOUNDED ConcurrentHashMap with no eviction policy, initially sized at the capacity SYNC_FIFO LinkedHashMap using FIFO eviction, guarded by synchronized monitor SYNC_LRU LinkedHashMap using LRU eviction, guarded by synchronized monitor RW_FIFO LinkedHashMap using FIFO eviction, guarded by read/write lock LOCK_LRU LinkedHashMap using LRU eviction, guarded by lock FAST_FIFO ConcurrentHashMap and ConcurrentLinkedQueue using FIFO eviction FAST_FIFO_2C ConcurrentHashMap and ConcurrentLinkedQueue using Second Chance eviction LINKED_FAST_FIFO_2C ConcurrentHashMap and ConcurrentLinkedQueue and key-value links using Second Chance eviction CONCURRENT_LINKED_2C ConcurrentHashMap with a lock-free list using Second Chance eviction EHCACHE_FIFO Ehcache using FIFO eviction EHCACHE_LRU Ehcache using LRU eviction
Implementation 80%-R / 20%-W 20%-R / 80%-W normal forced normal forced UNBOUNDED 1,333 2,576 5,543 11,944 SYNC_FIFO3,0566,96111,87628,419 SYNC_LRU3,1587,19612,14328,885 RW_FIFO2,0925,6698,50323,205 LOCK_LRU2,0887,5448,34130,977 FAST_FIFO1,4892,6647,20913,474 FAST_FIFO_2C1,9632,7507,79413,922 LINKED_FAST_FIFO_2C1,5922,7057,43313,724 CONCURRENT_LINKED_2C 1,665 2,754 6,660 12,791 EHCACHE_FIFO15,29915,39962,60564,263 EHCACHE_LRU14,60115,39062,41763,843 [Less]
Aboutpysage is a high-level message passing library with currency in mind. simple pythonic object-oriented API publisher/subscriber pattern built-in messages are distributed with efficient network transport using UDP centralized singleton manager
... [More]
class - objects registration, discovery, message propagation grouping - automatic threads management for partitioning receivers in groups
Installationpysage can be installed via setuptools:
easy_install pysageUsagefrom pysage import MessageReceiver, ObjectManager
from pysage.messaging import Message
mgr = ObjectManager.get_singleton()
class SecretMessage(Message):
properties = ['content']
class SecretReceiver(MessageReceiver):
subscriptions = ['SecretMessage']
def handle_SecretMessage(self, msg):
print 'the secret is %s' % msg.getProperty('content')
return True # stop propagation
def update(self, evt):
'''runs on every objectmanager.tick'''
pass
mgr.register_object(SecretReceiver(), 'secretreceiver')
mgr.queue_message(SecretMessage(content='big secret'))
mgr.tick() # prints "the secret is big secret"
mgr.trigger(SecretMessage(content='small secret')) # prints "the secret is small secret"
mgr.find('secretreceiver') # returns the receiver instancelook at Wiki for more.
Change Log1.2.5Added minimum_sleep to the threaded tick runner. This helps the OS to give control to better manage control between threads. Removed ez_setup from the directory structure Fixed the messageID generator already executing bug. Python generators are not thread safe. Added all to messaging module to prevent accidental importing Message class to override the system one 1.2.4Fixed threads timing issue by changing to a cross-platform timing function Changed so that child threads update at 30 milliseconds interval Changed unit tests to now use nosetests Added add_group method so that a group can be independently added, started Improved threading support to sleep 1 millisecond if time to process took longer than interval. To cooperate with other threads.
1.2.1Fixed so that child threads update in 30 milliseconds interval Changed code to use higher resolution timer on windows 1.2.0 Added grouping feature. Receivers in separate groups are in a separate thread using the same event queue, but their own update loop
LicensePysage itself uses MIT license.
However, if you need messaging across processes or network, pysage uses pyraknet and therefore Raknet for UDP network implementation. pyraknet uses the GNU Lesser General Public License.
RakNet is free to use for non-commercial use and purchasable for commercial use. It uses the Creative Commons Attribution - NonCommercial 2.5 license.
Future Plansthere are plans to enhance pysage to be able to partition objects (message listeners) to run across multiple processes, and possibly across networks. [Less]
Apropos is a Scheme dialect with influences from T, PLT Scheme, Common Lisp, Erlang, and Prolog. The developers of Apropos are focusing on adding a few features found in other functional programming languages such as pattern matching, and single
... [More]
assignment variables. Apropos is also intended to be modular, and support highly-concurrent, light-weight threads (a la Erlang). [Less]