Thread pools on the JVM should usually be divided into the following three categories:
- CPU-bound
- Blocking IO
- Non-blocking IO polling
Each of these categories has a different optimal configuration and usage pattern.
| /* | |
| To use: | |
| * save this script as migrate.js | |
| * fill in the user/pass variables at the top | |
| * save the block of json below as package.json right next to it | |
| * install node.js from nodejs.org | |
| * run 'npm install' from the directory where you saved the files | |
| * run 'node migrate.js' | |
| * profit |
| Latency Comparison Numbers (~2012) | |
| ---------------------------------- | |
| L1 cache reference 0.5 ns | |
| Branch mispredict 5 ns | |
| 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 us | |
| Send 1K bytes over 1 Gbps network 10,000 ns 10 us | |
| Read 4K randomly from SSD* 150,000 ns 150 us ~1GB/sec SSD |
| window.HAL = {} | |
| class HAL.Model extends Backbone.Model | |
| constructor: (attrs) -> | |
| super @parse(_.clone attrs) | |
| parse: (attrs = {}) -> | |
| @links = attrs._links || {} | |
| delete attrs._links | |
| @embedded = attrs._embedded || {} |