*****
对于很耗时的,不需要用户交互的功能,比如用户回复贴子需要公众号或者手机信息或邮件通知楼主(这些都非常耗时的),同时还需要更新网站的今日发贴数,这些对回贴人来说,根本就不需要马上看到的效果,而程序处理起来又可能很耗时,就可以考虑开启子进程。
关键点有两个:其一,用户并不需要马上看到执行效果,其二,可能比较耗时。这个时候就可以考虑采用子进程了。
下面拿一个图讲解

其中`fork_set();` 函数后面的代码就开始进行子进程。这个函数前面的代码就是用户当前所等待执行的。

如下图所示,从`fork_set()` 函数这个位置开始就启用子进程。你把耗时的,不需要用户关注的功能就放在子进程里,让他在后台异步执行。需要用户得到响应的结果,就要放在主进程里同步执行反馈给用户。
至于`fork_set()` 函数最好放在哪个位置呢?
一般放在用户提交数据入库以后那个分界点,因为入库前都需要做判断。并且也不能允许它重复入库。所以最合理的位置就是入库之后那个分界点。
异步子进程更适合POST数据,取数据的话不是很适合。
通过 `fork_main()`==true 可以判断是主进程 ,通过`fork_son()`==true 可以判断是子进程。
写代码的时候,只能这样写
if( fork_main()){
//执行代码
}
或者
if( fork_main()==true){
//执行代码
}
if( fork_son()){
//执行代码
}
或者
if( fork_son()==true){
//执行代码
}
绝对不可以按下面的方法处理,也就是说不能判断为非这种情况,必须按是来判断,不能按非来判断。
if( !fork_main()){
//执行代码
}
if( fork_main()==false){
//执行代码
}
if( fork_son()==false){
//执行代码
}
if( !fork_son()){
//执行代码
}
特别提醒,`fork_set()` 函数后面的代码如果不做判断的话,主进程与子进程都会同时执行,如果有入库的话,会导致重复入库,这一点务必要注意!!!
所以对于入库的操作必须要做判断处理。不入库的代码,取数据的代码,重复执行是没问题的。
`fork_set()` 函数前面的代码,就只执行一次,子进程不会单独再去执行。子进程只会从`fork_set()` 函数的后面开始执行。是异步开启一个进程去执行。`fork_set()` 函数前是什么变量值,子进程会继续沿用。子进程修改后的变量值不会影响到主进程,`fork_set()` 函数后的逻辑与变量,主进程 与子进程他们是互相隔离的。
,



