ARTICLE · 1160661
文档已经关了,打印机为什么还在继续出纸?
文档已经关了,打印机为什么还在继续出纸?你把一份十几页的材料送去打印,随后关掉文档,转头处理别的事情。打印机仍然继续工作。 反过来,发现选错了文件时,你着急地关掉窗口,却发现纸还在往外走。这两个现象背后,其实是同一个设计:打印被拆成了可以交接的工作。 
点下“打印”,不等于应用亲自守着打印机出完每一张纸。 应用需要根据页面范围、份数等设置,准备这次输出所需的内容,并提交一个打印任务。可以把任务理解为一次有内容、有设置、有目标设备的输出请求。 文档是你正在编辑的材料;打印任务则是为这次输出准备的工作。两者有关联,却不是同一个东西。所需数据一旦完整交给打印系统,原来的编辑窗口通常就不需要一直保持打开。 这里的前提是“已经交接”。如果应用还在准备页面,或者任务尚未提交完就被强行终止,不能保证打印仍然完整进行。 电脑与打印机的速度不同,因此中间需要一个缓冲环节。 准备一页文字的打印数据,和让机械部件走纸、让墨水或碳粉形成内容,花费的时间并不相同。如果把两个过程绑在一起,应用就可能一直等待设备。 常见的解决办法叫“假脱机”,英文是spooling。这个名称有点拗口,先抓住它的作用:把打印数据暂存起来,让后续处理可以由后台服务接手。在Windows的常见配置中,暂存可以落到文件里,而不是只放在一个文档窗口中。 后台服务是由系统管理、无需你持续操作窗口也能工作的程序。打印假脱机服务会参与管理任务,协调数据处理与发送。它让应用提交工作的节奏,与设备慢慢输出的节奏有机会分开。 
打印队列,就是这些任务的管理视图。 你看到的列表,列出的是与这台打印机相关的任务,而不是当前打开的所有文档。任务可能等待、暂停或处于处理中;实际安排还会受到配置和设备状态影响。 另外,打印也不一定是把原来的文档文件原封不动地塞给设备。打印链路可能需要把页面内容变成打印机能够处理的数据。驱动可以理解为参与系统与设备配合的软件组件,转换可能由相关组件完成。 不同打印方式的处理位置并不完全相同。有的工作在本机进行,有的会经过打印服务器——也就是替多台电脑管理打印的计算机或服务。因此,图中的三步只是简化关系,不是每种设备内部都一模一样的接线图。 关闭窗口处理的是编辑界面。取消任务则是在打印链路上提出停止请求。已经交给另一部分系统的工作,并不会因为原来的窗口消失就必然撤销。 如果任务还在电脑的打印队列中,可以针对那次任务取消。若全部数据已经发到打印机,电脑端可能已经没有可撤销的任务,这时可能需要使用打印机本身的取消功能。 
这也解释了为什么有时取消之后,设备仍可能多出一张纸:请求被处理、设备停止,都有各自的时机,已经进入输出过程的内容不一定立刻停止。已经完成的纸张更不可能被软件操作撤回。 应用提交成功,说明它完成了某个交接阶段;并不单凭这句话就能证明设备已经顺利输出。任务从电脑队列消失,也可能发生在数据已交给设备之后,不能只看列表就断定每张纸都没有问题。 同样,后台继续工作不等于完全不需要电脑、电源或连接。后续是否依赖本机,要看数据交到了哪里、还有什么步骤没做完。 理解打印队列,真正有用的收获是:电脑里的一个动作,可能会拆成多个部分接力完成。判断它是否结束,要看任务走到了哪一步,而不只是看最初的窗口还在不在。


为什么“关文档”与“取消打印”是两个操作?
