零零客微文大全00ke.net

  • 你能不能同时做好多件事?
  • 来源:MacTalk


上回书谈到计算机的并发和并行技术,几十年过去了,CPU 从单核到多核,到分布式计算,集群,云计算,软硬件技术突飞猛进。人脑就比较惨,这么多年,进化速度为零,脑袋仍然只有一个并且没有裂变出多核……


那人脑能不能并发呢?有读者是这么告诉我的


看过一个关于人脑的理论,说不清是并发还是异步。有时候我们很努力的想一个问题,但却怎么也想不起来,于是我们放弃了。但是大脑并没有放弃,此时它会自动起一个 gorouting,继续在大脑的记忆宫殿寻找这个记忆碎片,当找到时执行回调告诉你。而此时你可能正边洗澡边唱「白云山上白云飘」呢。


脑科学发展了很多年,但人类对大脑运行机制的认知还是懵懵懂懂,大多数应用都在科幻电影里,我们并不真正理解大脑是怎么运作的。什么是并行,什么是并发,搞不懂。所以我们说一心二用,或者一心多用,其实和心脏没什么关系。


我们常说「一心不能二用」,其实是指那些做事三心二意的人,但我们真的不能一心多用吗?或者说并发带给我们的到底是效率的提升还是状态的下降?关于这件事,我的看法是:不可一概而论。


那位同学请把砖头收起来,我还没说完呢。


关于人脑的多任务处理,应该从个人特点、所处环境和任务特性来考虑。


从日常生活经验看,人脑天生就是用来处理多任务的,比如你可以一边洗澡一边唱歌,一边看电影一边磕瓜子还要注意不要被飞来的砖头砸到,一边开车一边听极客时间还要忍住不玩手机……不过这样的多任务都是在放松环境下的简单任务,大部分人都可以轻松应对。


事实上,当我们在健身房跑步时听英语,写文章或程序的时候听歌,坐地铁的时候阅读,步行的时候思考,只要不撞南墙,就都是很有价值的事情。我们在一个相对宽松的环境下把复杂的逻辑任务和简单的机械任务结合在一起,既不影响 A,也不会干扰 B,这是我们优先要采取的并发策略。


当然,也要因人而异。我喜欢开车,开了十几年,驾驶差不多是下意识的行为,从出发到目的地经常不知道自己是怎么到达的。这时候听极客时间、得到或英语新闻,就会比较从容。有些人开车只是驾驶已经够忙乱了,倒一次车能车头入绝不车尾进,开次长途出的汗够洗澡的,那么就专心开车好了,车内最好保持安静或听一些舒缓的音乐。


我曾经看过一本书叫《错觉》,书中有一段描述了一位机长在飞机飞行的过程中发现机上设备出了点小故障,于是他和副机长一起排查,接着又找来机械师,哥三忙的不亦乐乎,过了一段时间,有人问,谁在开飞机呢?这时飞机无人驾驶已经很久了,等反应过来之后,飞机已经开始俯冲坠地。这种空难并不是意外,一架状况良好的飞机直接撞向地面不是偶尔发生,这种现象在航空领域被称作「可控飞行撞地」,其根本原因就是,人们太相信自己的多任务处理能力!


还有一种情况就是,在同一时间做两项或多项复杂任务,比如你让程序员在编码的同时帮助别人解决问题,能不能做好?也许有人可以,但我的感觉是,这种安排效率反而会打折扣。 人们有时候会低估自己的能力,但在更多时候会高估自己。在复杂任务并发处理的时候,人脑往往会高估自己的处理能力,以为可以,其实任务的并行,上下文的切换,注意力的分散,都会让你的效率大打折扣。在软件设计中,我们常说职责单一原则,一个类或方法尽可能只做一件事情,无论是效率、性能还是后期维护都会好很多,人脑其实也是一样。


总结一下:


1、简单任务的并发是大脑天生的 nature,每个人都在不自觉的应用。
2、在宽松的环境中让简单机械的任务和复杂有机的任务并行完成是非常不错的做法,提高效率节省时间。
3、在高危环境中(驾驶、高空作业等等)我们应该专心致志的只做当前的工作。
4、对于复杂任务,我们最好一件一件完成,即使有些人能够同时处理多重任务,那也需要长期的艰苦训练,比如郭靖,能够双手互搏,你能否做到呢?


计算机的并发编程道理上差不多,如果你能够掌握和理解真正的并发和并行机制,就可以写出健壮、高效和高性能的代码,处理复杂任务。欲穷千里目,更上一层楼。


文末推荐,新专栏《Java 并发编程实战》,学员目前超过 8300 人,好评如潮。别错过最后一天优惠期。


名人

1 2 3 4 5 >> 

公众号 • MacTalk

Flag Counter