in computer science we make a distinction between two aspects of multitasking: parallelism and concurrency. parallelism generally refers to doing multiple things at the same time, ie in parallel, while concurrency refers to the ABILITY to do two specific things at the same time

this distinction may seem pedantic, but in practice it's critical; concurrency is necessary but not sufficient for parallelism, and often, more important, too. designing a process of concurrency entails identifying task interdependencies and untangling the unnecessary ones

parallelizing a process typically entails first enabling it to be concurrent by finding all its independent subtasks, and then scheduling those tasks to be run optimally, potentially in parallel if you have the capability

however, even w/o the last step, there are benefits

Follow

identifying needless dependencies requires you to rethink your approach, to really break down what you're trying to accomplish to its smallest pieces, breaking up larger tasks into smaller ones, and dispel assumptions about which tasks must be done before others

oftentimes after going through this effort, you discover better ways to accomplish your goals, or even better goals to be aiming for; we sometimes think we want something other than that which we need, due to tangled chains of logic hidden by our assumptions

when you do this enough times you build intuition for needless dependencies and tangled reasoning, & begin to identify these in your own life; in your day to day habits, your longer term plans, and even your instantaneous thought patterns

much of CBT is analogous to this process

those of us with attention-modulation issues tend to suffer from degenerate parallelism, ie multitasking which is slower than a naive serial approach, due to a variety of failure modes; two major ones are deadlocks & thrashing

these lead to resource exhaustion & poor performance

a deadlock occurs when two distinct processes both need the same resource, but only one can access it at a time, & neither is able to yield to the other

imagine you need to shower, but you can't until you change your sheets, but you don't want to touch clean sheets while dirty

from our perspective here, clearly this is ridiculous and mildly amusing, but many people end up stuck in this sort of situation due to poorly-designed algorithms; indeed, ones which were not explicitly designed but rather evolved one logical step at a time, without foresight

thrashing refers to the situation where a process has many IO deps & can't schedule a long-enough compute period; switching btwn these IO tasks, it can't find time to "think straight"

consider cooking a complex meal & not making progress bc of all the tasks ur switching between

with better planning, you'd be able to schedule these various tasks in advance in a way which let you do continuous blocks of work at a time while waiting for other things to complete, but without proper planning, reactivity forces you to jump btwn tasks haphazardly, wasting time

there are many other multitasking failure modes known to computer science, and mostly all of them show up in our personal lives as well; after all, CS is the study of processes, not computers, and executive function disorders manifest in a poor ability to manage our own processes

I've found great utility in studying parallel computing, both professionally and personally; while the former makes me money very directly, the latter enables me to operate well enough to make use of my intellectual knowledge, and arguably, is more important, being transferable

parallel computing best practices transfer to our lives:

break tasks down to their smallest logical units, but no further.
seek out and eliminate needless dependencies.
be mindful of interruptions and context switching.
schedule similar tasks together.

optimize for concurrency.

Sign in to participate in the conversation
Mastodon

a Schelling point for those who seek one