Uploaded image for project: 'core.memoize'
  1. CMEMOIZE-24

Thread synchronized and unsynchronized spoofing


    • Type: Improvement
    • Status: Open
    • Priority: Minor
    • Resolution: Unresolved
    • Labels:


      Problem: Function A is memoized. Function B, among other things, calculates a valid function call of A without ever invoking A. We want to utilize this effect in B to further cut calculations of A. In case that we expect B to perform faster than A we also want callers of A to wait when a corresponding B is running.

      A desired operation how to do this in B would be
      (spoof A args calc)

      Where calc is a fn of zero args that produces a value equal to (apply A args). This allows the caller to put exactly the amount of work into calc that he expects to perform faster than A.

      Spoof returns what calc returns or in case of a cache hit what is cached for args. I. e. if an invocation (A args) happened before the call of (spoof A args calc), calc won't be invoked.

      In cases where we already have the result of (A args) and don't want to be blocked by a concurrent invocation of (A args) a desired operation would be

      (spoof-unsynchronized A args val)

      it returns val immediately and updates the cache of A soon. It doesn't have to block invocations of (A args) since the unsynchronized spoof is a very fast operation that is subject to a race condition with invocations of (A args) anyway. (So a swap! on the internal cache state should suffice).




            • Assignee:
              seancorfield Sean Corfield
              lgs32a Leon Grapenthin
            • Votes:
              0 Vote for this issue
              0 Start watching this issue


              • Created: