我们都知道,如今的CPU可以如此强大,和其复杂而科学的调度系统是分不开的。CPU不会傻傻的等待一件事情做完才去做另外一件事情,而是把所有的工作细化,轮询执行,这样才可以保证资源利用效率最大化。
同样,工作中也经常会遇到A事情暂时做不下去而要暂时挂起的情况,这时我们要傻傻的无限等待吗?若这样效率就大打折扣了,我们可以在此设定一个回调,马上开启另外一个线程开始另外一件B事情的运行,当B事情遇到阻塞又暂时搁浅,而A事情已经回调通知我们可以继续了,这时我们就可以马上切换到A事情上去。当这样几个事情之间来回切换即可保持一直有事做的状态,一天下来可能就做了别人几天的工作量。
除了这种阻塞的情况,还有可能遇到各种各样的打断事件。比如正在专心码代码,突然经理一个电话过来要你马上去解决一个严重BUG,这时手头的工作可能就要暂时中断了,要被暂时挂起,等待紧急事件处理完毕之后再继续。
当然,现实中的调度更为复杂,还要对任务优先级排序,对于优先级最高的任务一旦回调通知可以继续,马上要中断其他线程的工作,转向优先级最高的事情。
可以通过下面的图片来模拟一下多线程工作的含义:
注:图中线条越粗表明任务优先级越高。通过一个小故事来扯扯吧:
《程序员小A的一天》
8点钟上班,开始做一个需要今天下班前交付的需求(黑色线条),因此,这时需求优先级是最高的,在主线运行。
开发过程中突然发现第三方提供的SDK接口有严重问题,需要第三方去修改,这时需求开发也就进入了“阻塞”状态;小A马上切换到了一个一般问题(绿色线条)的解决上去(优先级较低),然后一直坚监听第三方修改完成的通知,收到接口修改成功的通知马上要“中断”现有的一般问题解决,再次转向需求开发。
上午十一点的时候经理突然打电话给小A,某某功能出现严重BUG(黄色线条),需要马上解决,这时这个严重BUG一下子成了优先级最高的任务,需要马上“中断”需求开发,转向严重BUG的解决。
经过两小时的奋战终于成功解决了这个严重BUG,此时已经是下午1点钟了,小A匆匆吃过午饭,本想小憩一会,突然梦中惊醒,需求要在下班前交付,没办法,程序员就是这么苦逼,洗把脸之后继续需求的开发,终于在下午四点钟的时候搞定了需求开发。
这时还有一个半小时才下班,傻等吗?上午中断的一般问题解决可以让它继续了,五点半下班的时候这个一般问题也解决了。
这样小A就在一天内完成了三项工作,可以放松下班了。(PS:五点半下班只是梦想。)
上面的例子只是很简单的一种情况,实际工作中的场景可能要比这复杂的多,但万变不离其宗,凡事总有套路,慢慢品味总会找出技巧。
最后,也可以看出,工作和学习有很大不同,学习要保持一颗专注的心,而现实中的工作可能要学会“分心”,调度切换能力越强工作效率也就越高。这也就解释了为什么一些学习能力很强的人在工作上可能会差强人意,也许是太过“专心”而不够灵活吧。
本人只是一个刚入职不到一年的小菜鸟,老鸟们可一笑而过,切勿开启嘲讽模式,毕竟和谐最重要。
更多优质文章关注微信公众号
请关注我的新浪微博:AndroidTip
CSDN博客:http://blog.csdn.net/yayun0516