threading : job_system

Currently, I use a combination of copied external data, a passed arg, and some internally allocated job memory for all my job work. It's overly complicated, and I don't like it. Plus actually taking advantage of the step based job is a pain in the ass. You need to allocated some memory internally and work with it each frame. The advantage being though, that it's easier to stall and let other jobs finish [which is important if I'm adding a job I'm reliant on and the job ends up on the same consumer after me].

I think I'm going to strip this down to just an *arg, which can perhaps be managed memory. If it's managed memory, the job itself keeps will aquire it for the duration of the job, so if it's passed forward it will keep. Otherwise it is just an arg. Possibly just pass in both [void*, managed_mem*] so that it can be moved forward easily.

Jobs that need to be broken up will now instead do their part with their data, and then pass the data forward into a new job. This will get rid of the stall due to waiting on an operation. If I'm waiting on an operation, I should still be able to stall and let the next job run? Or should I just continually recreate myself while waiting? [decisions, decisions]

Ops I will get rid of and just introduce something specific to jobs that need to be cancelable.