Some PyFile benchmarks, mostly to show off the PyFile nio rewrite

Tests done on FreeBSD 6.2-RELEASE, Java 1.5.0_13 in server mode and Python 2.5.1

(If anyone's worried about FreeBSD Java, the times are in line with OS X's Java 1.5)

Preparations: 100 Iterations: 5

Notes:

* jython's file iter is roughly equivalent to its readline, whereas CPython's readline is not as optimized as its iter

* The few anomalies in the smaller benchmarks are probably due to hotspot kicking in. Ideally we would run more preparations

* why is read slower than iter? seems like a lot of time is spent in allocating the ByteBuffer whereas iter uses a pre-allocated, small one.

Reading:

   1     def test_read(self, fp):
   2         fp.read()
   3     test_read = bench(test_read)

[http://underboss.org/~pjenvey/jython/pyfile-nio/small/test_read.jpg] [http://underboss.org/~pjenvey/jython/pyfile-nio/big/test_read.jpg]

   1     def test_iter(self, fp):
   2         for line in fp:
   3             pass

[http://underboss.org/~pjenvey/jython/pyfile-nio/small/test_iter.jpg] [http://underboss.org/~pjenvey/jython/pyfile-nio/big/test_iter.jpg]

   1     def test_readline(self, fp):
   2         while fp.readline():
   3             pass

[http://underboss.org/~pjenvey/jython/pyfile-nio/small/test_readline.jpg] [http://underboss.org/~pjenvey/jython/pyfile-nio/big/test_readline.jpg]

   1     def test_readline_with_tell(self, fp):
   2         while fp.readline():
   3             fp.tell()

[http://underboss.org/~pjenvey/jython/pyfile-nio/small/test_readline_with_tell.jpg] [http://underboss.org/~pjenvey/jython/pyfile-nio/big/test_readline_with_tell.jpg]

   1     def test_readlines(self, fp):
   2         fp.readlines()

[http://underboss.org/~pjenvey/jython/pyfile-nio/small/test_readlines.jpg] [http://underboss.org/~pjenvey/jython/pyfile-nio/big/test_readlines.jpg]

Writing:

   1 MSG = ('abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz123456789'
   2        '0abcdefgh\r\n')

   1     def test_write(self, fp, lines):
   2         write = fp.write
   3         for i in range(lines):
   4             write(MSG)

[http://underboss.org/~pjenvey/jython/pyfile-nio/small/test_write.jpg] [http://underboss.org/~pjenvey/jython/pyfile-nio/big/test_write.jpg]

   1     def test_writelines(self, fp, lines):
   2         lines = [MSG for i in range(lines)]
   3         fp.writelines(lines)

[http://underboss.org/~pjenvey/jython/pyfile-nio/small/test_writelines.jpg] [http://underboss.org/~pjenvey/jython/pyfile-nio/big/test_writelines.jpg]