M
MenTaLguY
--=-1/uxTqj3vQ7r47rLW4Hd
Content-Type: text/plain
Content-Transfer-Encoding: quoted-printable
It looks like I got too creative in 0.6.1 and consequently ran afoul of
a bug in the Ruby interpreter. 0.6.2 works around the bug and should be
entirely stable at this point.
Thanks to Young Hyun for his help in coming up with test cases.
=3D=3D what?
fastthread is a Ruby library which provides a faster (and
non-memory-leaking) C implementation of the concurrency primitives from
stdlib's thread.rb. It aims to be 100% compatible with thread.rb's
public API.
So, how much faster? In the single-threaded case, fastthread's version
of Mutex#lock and Mutex#synchronize are comparable in performance to
Thread.critical=3D and Thread.exclusive. With multiple threads, it has an
additional advantage over Thread.critical in that entering a critical
section doesn't suspend any other threads unless they're competing for
the same lock. (Compare that to Thread.critical, which stops all other
threads dead!)
I know a lot of folks have been avoiding stdlib's Mutex because all the
method calls killed performance. But no more, with fastthread! Why use
Thread.critical when you can use the real thing?
=3D=3D how?
Simply require 'fastthread' in addition to 'thread'. If you want to
make fastthread optional (recommended!), do it this way:
require 'thread'
begin
require 'fastthread'
rescue LoadError
end
This way, your program will still work on systems that don't have (or
don't need -- e.g. JRuby) fastthread, but you still get a performance
boost on systems where it's available.
=3D=3D where?
Gem:
http://moonbase.rydia.net/software/optimized-locking/fastthread-0.6.2.gem
Tarball:
http://moonbase.rydia.net/software/optimized-locking/fastthread-0.6.2.tgz
fastthread is also available on Rubyforge (and therefore the main gems
repository), courtesy of the Mongrel project:
https://rubyforge.org/frs/?group_id=3D1306
-mental
--=-1/uxTqj3vQ7r47rLW4Hd
Content-Type: application/pgp-signature; name=signature.asc
Content-Description: This is a digitally signed message part
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.3 (GNU/Linux)
iD8DBQBFsBYLSuZBmZzm14ERApnXAKC6noxT9WIHOfZQR3H09qGu/k/0IQCaAgEe
wP41XprxuvmKMEsAZWNvvnM=
=WIgG
-----END PGP SIGNATURE-----
--=-1/uxTqj3vQ7r47rLW4Hd--
Content-Type: text/plain
Content-Transfer-Encoding: quoted-printable
It looks like I got too creative in 0.6.1 and consequently ran afoul of
a bug in the Ruby interpreter. 0.6.2 works around the bug and should be
entirely stable at this point.
Thanks to Young Hyun for his help in coming up with test cases.
=3D=3D what?
fastthread is a Ruby library which provides a faster (and
non-memory-leaking) C implementation of the concurrency primitives from
stdlib's thread.rb. It aims to be 100% compatible with thread.rb's
public API.
So, how much faster? In the single-threaded case, fastthread's version
of Mutex#lock and Mutex#synchronize are comparable in performance to
Thread.critical=3D and Thread.exclusive. With multiple threads, it has an
additional advantage over Thread.critical in that entering a critical
section doesn't suspend any other threads unless they're competing for
the same lock. (Compare that to Thread.critical, which stops all other
threads dead!)
I know a lot of folks have been avoiding stdlib's Mutex because all the
method calls killed performance. But no more, with fastthread! Why use
Thread.critical when you can use the real thing?
=3D=3D how?
Simply require 'fastthread' in addition to 'thread'. If you want to
make fastthread optional (recommended!), do it this way:
require 'thread'
begin
require 'fastthread'
rescue LoadError
end
This way, your program will still work on systems that don't have (or
don't need -- e.g. JRuby) fastthread, but you still get a performance
boost on systems where it's available.
=3D=3D where?
Gem:
http://moonbase.rydia.net/software/optimized-locking/fastthread-0.6.2.gem
Tarball:
http://moonbase.rydia.net/software/optimized-locking/fastthread-0.6.2.tgz
fastthread is also available on Rubyforge (and therefore the main gems
repository), courtesy of the Mongrel project:
https://rubyforge.org/frs/?group_id=3D1306
-mental
--=-1/uxTqj3vQ7r47rLW4Hd
Content-Type: application/pgp-signature; name=signature.asc
Content-Description: This is a digitally signed message part
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.3 (GNU/Linux)
iD8DBQBFsBYLSuZBmZzm14ERApnXAKC6noxT9WIHOfZQR3H09qGu/k/0IQCaAgEe
wP41XprxuvmKMEsAZWNvvnM=
=WIgG
-----END PGP SIGNATURE-----
--=-1/uxTqj3vQ7r47rLW4Hd--