By Ben Sawyer, Consultant, LogicsOne
The term “multi-tasking” basically means doing more than one thing at once. I am writing this blog while playing Legos w/ my son & helping my daughter find New Hampshire on the map. But I am by no means doing more than one thing at once; I’m just quickly switching back & forth between the three which is referred to ask "context switching." Context switching in most cases is very costly. There is a toll to be paid in terms of productivity when ramping up on a task before you can actually tackle that task. In an ideal world (where I also have a 2 handicap) one has the luxury to do a task from start to finish before starting a new task. My son just refuses to let me have 15 minutes to write this blog because apparently building a steam roller right now is extremely important. There is a sense of inertia when you work on a task after a short while because you begin to really concentrate on the task at hand. Since we know it's nearly impossible to put ourselves in a vacuum & work on one thing only, the best we can hope for is to do "similar" things (i.e., in the same context) at the same time. Let's pretend I have to email my co-worker that I'm late writing a blog, shovel my driveway, buy more Legos at Amazon.com, & get the mail (okay, I'm not pretending). Since emailing & buying stuff online both require me to be in-front of my laptop and shoveling & going to my mailbox require me to be outside my house (my physical location), it would be far more efficient to do the tasks in the same "context" at the same time. Think of the time it takes to get all bundled up & the time it takes to power on your laptop to get online. Doing a few things at once usually means that you will not do that task as well (its quality) as you would have had you done it uninterrupted. The more closely, time-wise, you can do a task usually means the better you will do that task since it will be "fresher" in your mind. So…
- Entire Task A + Entire Task B = Great Task A & Great Task B.
- 1/2 Task A + Entire Task B + 1/2 Task A = Okay Task A & Excellent Task B.
- 1/2 Task A + 1/2 Task B + 1/2 Task A + 1/2 Task B = Good Task A & Good Task B
Why does this matter? Well, because the same exact concept applies to computers & the software we write. A single processor can do one thing at a time only (let's forget threads), but it can context switch extremely fast which gives the illusion of multi-tasking. But, like a human, context switching has a cost for a computer. So, when you write code try to do many "similar" things at the same time. If you have a bunch of SQL queries to execute then you should open a connection to the database first, execute them, & close the connection. If you need to call some VMware APIs then you should connect to vCenter first, do them, & close the connection. Opening & closing connections to any system is often slow so group your actions by context which, in this case, are systems. This also makes the code easier to read. Speaking of reading, here's a great example of the cost of context switching. The author Tom Clancy loves to switch characters & plot lines every chapter. This makes following the story very hard & whenever you put the book down & start reading again it's nearly impossible to remember where you left off b/c there's never, ever a good stopping point. Tom Clancy's writing is one of the best examples of how costly context switching is.
So, what does this have to do with cloud computing? Well, it ties in directly with automation & orchestration. Automation is doing the work & orchestration is determining the order in which work is done. Things can get complicated quickly when numerous tasks need to be executed & it's not immediately apparent which need to run first & which are dependent on other tasks. And, once that is all figured out, what happens when a task fails? While software executes linearly, an orchestration engine provides the ability to run multiple pieces of software concurrently. And that's where things get complicated real fast. Sometimes it may make sense to execute things serially (one at a time) vs. in parallel (more than one at a time) simply b/c it becomes very hand to manage more than one task at the same time.
We live in a world in which there are 10 different devices from which we can check our email and, if we want, we can talk to our smartphone & ask it to read our email to us. Technology has made it easy for us to get information virtually any time & in any format we want. However, it is because of this information overload that our brains have trouble separating all the useful information from the white noise. So we try to be more productive and we multi-task but that usually means we’re becoming more busy than productive. In blogs to follow, I will provide some best practices for determining when it makes sense to run more than one task at a time. Now, if you don't mind, I need to help my daughter find Maine…