计算机科学家们——那些研究计算机和编程的原理的人,能否帮助我们解决人类的问题,例如,要做的事太多,可用的时间却不够? 这是布莱恩·克里斯蒂安(Brian Christian)和汤姆·格里菲斯(Tom Griffiths)合著的新书《赖以生存的算法》(Algorithms to Live By)中提出的主张。这是对任何经济学家都有吸引力的想法。我们倾向于认为日常决策是应用数学的一个分支,而计算机科学亦是如此。 准确来说,利用计算机科学和使用计算机不是一回事。计算科学家倾注了数十年时间来解决各种问题,如整理信息、排定优先顺序和联网。他们为计算机开发的许多算法也适用于人类。毕竟,算法并非计算机程序,而是一种结构化的步骤方法,类似于"菜谱"。("算法"一词因9世纪波斯数学家阿尔-花剌子模(Al-Khwārizmī)而得名,但在其研究工作的数千年前就已存在。) 那么,什么是完成待办事项列表的最佳配方呢?也许比你以为的更简单:以任意顺序来做列表上的事,因为最后耗费的总时长一样。这是个带有一点儿天才的建议,但似乎表明,当我们有太多事情要做而感到压力和手忙脚乱时,计算机科学永远不能给我们带来启示。 或者说我以前是这么认为的。接着我读到计算机科学家彼得·丹宁(Peter Denning)在1970年发表的一篇论文,文中描述了计算机在多线程工作时可能遇到的一个问题。大多数计算机实际上无法真的多线程工作;而是像人类一样,会迅速从一件事切换到另一件事。计算机会在以下任务中快速切换:在你的屏幕上更新口袋妖怪(Pokémon)游戏、从网络下载更多视频、检查你是否敲击了键盘或挪动了鼠标,以及其它许多进程。但即使是计算机,也不能同时做无限量的工作,一旦达到某一限度,灾难就会发生。 这一问题源于使用易存取的"高速缓存"(caches)来储存数据。可以这么理解"高速缓存":想象有一名钢琴家在演奏她面前的两页或三页乐谱。这些乐谱都是储存在最高速的缓存中。乐谱背后还有其他乐谱,一会儿就能读取。此外还有容量更大但速度更慢些的缓存:放在琴凳里的乐谱;阁楼上还有更多乐谱,再有更多是存放在音乐商店里。在信息储存量和读取速度之间存在一种取舍。 如果钢琴家一次只演奏一首完整的乐曲,那么这样的设置是没有问题的。但是,如果要求她每隔1分钟左右换一首曲子,那么她就要花一些时间来取出琴凳里乐谱。如果她必须每隔几秒就换一首曲子,那她就没法演奏了;她所有的时间都会被用来调换谱架上和琴凳里的乐谱。 这跟计算机的高速缓存一样:存在一个等级制度——从微处理器自身的超高速内存,向下一直到硬盘(慢速)和异地备份(非常慢)。要想提高速度,计算机必须把当前任务所需的数据复制到快速缓存。如果任务切换太频繁,机器会把所有时间用来将一个任务的数据复制到缓存,然后切换任务、清除缓存并存入新的内容。在极限状态下,什么事都完成不了。丹宁将这种令人遗憾的状态形容为"系统崩溃"(thrashing)。 我们都有过除了崩溃以外一事无成的日子,不断从一项任务切换到另一项,实际上却什么都做不了。我们能否从计算机借鉴解决方案?最直截了当的方法是换个更大的缓存;可惜,这对计算机来说比人类更容易。 显而易见的替代方法是减少任务切换。计算机采用"中断合并"(interrupt coalescing)技术,即把多个小任务合并到一起处理。一份购物清单有助于避免多次往返商店的不必要旅程。你还可以把账单放在一块儿,每月一并处理。 但我们往往发现很难不从一个任务切换到另一个。计算机科学认为这种痛苦有一个原因:即在迅速响应和划出大块时间以提高生产率之间存在取舍。如果你想在5分钟之内回复你老板的邮件,你必须至少每5分钟查一次邮件。如果你想戒网一周来写小说,那么你的响应时间就必须放慢至一周。 任何解决方案都应该承认这种取舍。确定一个可接受的响应时间,然后据此打断自己的工作。如果你认为在4小时之内回复邮件完全没有问题(按多数标准都没问题),那么你只需要每4个小时查一次邮件,而不是每4分钟查一次。正如克里斯蒂安和格里菲斯建议的那样,决定自己想要如何响应。如果你想好好做点事情,就别超过那个响应标准。 本文作者著有《卧底经济学家反击战》(The Undercover Economist Strikes Back)一书。