Let's look at an innocuous piece of ruby. Consider some view code showing a user's name and phone number:
"#{first_name} #{last_name} #{phone}"Great - this is very succinct, readable, and can easily be extracted to a method in a
| var app = angular.module('myApp', []); | |
| /* Set up a simple controller with a few | |
| * examples of common actions a controller function | |
| * might set up on a $scope. */ | |
| app.controller('MainCtrl', function($scope, someService) { | |
| //set some properties | |
| $scope.foo = 'foo'; | |
| $scope.bar = 'bar'; |
L1 cache reference ......................... 0.5 ns
Branch mispredict ............................ 5 ns on recent CPU
L2 cache reference ........................... 7 ns 14x L1 cache
Mutex lock/unlock ........................... 25 ns
Main memory reference ...................... 100 ns 20x L2 cache, 200x L1 cache
Compress 1K bytes with Zippy ............. 3,000 ns = 3 µs
Send 2K bytes over 1 Gbps network ....... 20,000 ns = 20 µs
SSD random read ........................ 150,000 ns = 150 µs
Read 1 MB sequentially from memory ..... 250,000 ns = 250 µs 4X memory
| # Thee will be more information here when I share the entire problem space I'm working on, but | |
| # in short, this is preview material for my second talk in a series called "What Computer Scientists Know". | |
| # The first talk is on recursion, and goes through several examples., leading up to a problem based | |
| # on a simple puzzle that initial estimates based on performance of a previous puzzle would take years | |
| # to solve on modern computers with the techniques shown in Ruby. That sets the stage for improving the | |
| # performance of that problem with threading, concurrency, and related tuning. | |
| # | |
| # The second talk is on threading and concurrency, touching on algorithmic performance as well. | |
| # Using some knowledge of the problem (board symmetry, illegal moves, etc), we reduce the problem space | |
| # to about .5% of what we initially thought it was. Still, the initial single threaded solution took more |
| $ jruby -v | |
| jruby 1.7.5.dev (1.9.3p392) 2013-09-04 090d5dd on Java HotSpot(TM) 64-Bit Server VM 1.7.0_25-b15 [darwin-x86_64] | |
| $ time jruby -J-XX:+TieredCompilation -J-XX:TieredStopAtLevel=1 -J-Xverify:none -e 'require "rails"' | |
| jruby -J-XX:+TieredCompilation -J-XX:TieredStopAtLevel=1 -J-Xverify:none -e 5.18s user 0.47s system 136% cpu 4.142 total | |
| $ time jruby -e 'require "rails"' | |
| jruby -e 'require "rails"' 14.60s user 0.44s system 202% cpu 7.444 total |