All files / slocket/pound many-lock-unlock.js

92.19% Statements 59/64
80% Branches 32/40
100% Functions 12/12
93.1% Lines 54/58
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 941x 1x 1x 1x 1x     1x 1x 1x 1x 1000x 1000x   1000x 1000x 1x 1x     1x             1001x 1x 1x 1x   1001x 1x 1x     1x 1x   1000x 1000x   1000x 1000x         1x 1x 1x 1x 1000x 1000x   1000x 1000x 1x 1x     1x               1001x 1x 1x 1x   1001x 1x 1x     1x 1x   1000x 1000x   1000x 1000x         1x  
var slocket = require('../')
var filename = __dirname + '/many-lock-unlock.lock'
var N = 1000
var lockfile = require('lockfile')
var rimraf = require('rimraf')
 
function parallel (cb) {
  rimraf.sync(filename)
  var start = Date.now()
  var did = 0
  for (var i = 0; i < N; i++) {
    slocket(filename, function (er) {
      Iif (er)
        throw er
      this.release()
      if (++did === N) {
        var dur = Date.now() - start
        console.log('parallel %d/%dms => %d q/s, %d ms/q', N, dur,
                    Math.round(N/dur * 1000),
                    Math.round(dur/N*1000)/1000)
        Eif (cb) cb()
      }
    })
  }
}
 
function serial (cb, i, start) {
  if (!i && !start) {
    rimraf.sync(filename)
    i = i || 0
    start = start || Date.now()
  }
  if (i === N) {
    var dur = Date.now() - start
    console.log('serial %d/%dms => %d q/s, %d ms/q', N, dur,
                Math.round(N/dur * 1000),
                Math.round(dur/N * 1000)/1000)
    Eif (cb) cb()
    return
  }
  slocket(filename, function (er) {
    Iif (er)
      throw er
    this.release()
    serial(cb, i + 1, start)
  })
}
 
function lfp (cb) {
  rimraf.sync(filename)
  var start = Date.now()
  var did = 0
  for (var i = 0; i < N; i++) {
    lockfile.lock(filename, { retries: Infinity }, function (er) {
      Iif (er)
        throw er
      lockfile.unlock(filename, function () {
        if (++did === N) {
          var dur = Date.now() - start
          console.log('lf parallel %d/%dms => %d q/s, %d ms/q', N, dur,
                      Math.round(N/dur * 1000),
                      Math.round(dur/N*1000)/1000)
          Eif (cb) cb()
        }
      })
    })
  }
}
 
function lfs (cb, i, start) {
  if (!i && !start) {
    rimraf.sync(filename)
    i = i || 0
    start = start || Date.now()
  }
  if (i === N) {
    var dur = Date.now() - start
    console.log('lfs %d/%dms => %d q/s, %d ms/q', N, dur,
                Math.round(N/dur * 1000),
                Math.round(dur/N * 1000)/1000)
    Iif (cb) cb()
    return
  }
  lockfile.lock(filename, function (er) {
    Iif (er)
      throw er
    lockfile.unlock(filename, function () {
      lfs(cb, i + 1, start)
    })
  })
}
 
parallel(() => serial(() => lfp(lfs)))