什么是工作流?
工作流:两个或两个以上的人,为了共同的目标,连续的以串行或并行的方式去完成某一业务。
业务:工作流所指业务涵盖了与经营相关的活动。
串行或并行:业务中的步骤也许以一步接着一步的方式进行,我们称之为串行;或者由不同的人或组合根据不同的情况处理,我们称之为并行。
两个或两个以上的人:如工作流的名称所表达的含义,一个人处理的业务不称其为工作流,只有任务从一个人"流"向另一个人的时候,才有工作流。
共同的目标:个体参与工作流必须是为了同一个工作目标。如果个体处于两个相互独立的项目之中,不会产生工作流。
由于上述定义也许包含了物质生产和产品,所以我们以"业务工作流"来强调所讨论的不仅仅是制造业,而是业务的自动化。
我们可以借助一些现实生活中比较熟悉的事物来理解“流”这个概念。
首先这一说法是翻译字英语单词“stream”的,这个单词在做名词解释的时候,通常都是指水流、河流、溪流等。在做动词解释的时候,就有“流动”的意思。
转换到Java或其它编程语言当中,它其实指的是“数据流”、“数据的流动”这一概念。最常见的使用场景就是对计算机中的文件的读写操作了。那么问题又来了,“数据流”到底指的又是什么呢?
举一个最简单的例子,比如隔壁老王刚从网上下载了一部非常具有教育意义的电影,为了不被发现,老王将这部电影从电脑硬盘中剪切,然后复制到自己珍藏的移动硬盘中。
在这个过程中,电影文件的移动其实就构成了“数据流”——想象成一个小水塘里的水,从原来的小坑流向了另外一个小坑。
进一步简单拆解一下,“数据流”还可以简单分为“输入流”和“输出流”。
什么是“输入流”?回到刚才的例子,为了移动电影文件,计算机首先需要知道要移动的是哪个文件。大家知道,计算机中的所有文件其最终形式都是一大串仅仅由“0”和“1”组成的编码,所以计算机必须读取这个文件的所有“0”和“1”编码,才能获得一整个完整的文件。这种读取文件的操作,如果编程去实现的话,就需要用到“输入流”——从文件原本所在的位置,将文件的内容输入到计算机内存中,以便CPU进行处理(这里牵涉到比较基础的计算机原理,有兴趣的同学可以自行研究,或者关注我)。
而当老王打开自己的移动硬盘,用鼠标选择“粘帖”的时候,就会用到“输出流”——CPU会将刚才经由输入流所读取到的电影内容,从内存中写到移动硬盘,即“输出”到移动硬盘中。
无论是输出还是输入,计算机在操作文件或数据的时候,都不是瞬间就能将一个文件一下子处理好的,都是在硬件层面逐个去处理“0”或者“1”的。文件越大,“0”和“1”就越多,这就像是一条由无数个“0”和“1”前后相接所组成的长长的“河流”——这也就是“流”这一概念的来源。