20210303对于“析构”的存在意义 - ziyouzy/2021blog GitHub Wiki
如果将当前river-node的“数据流动框架”析构完成了
之后该做些什么呢?还有其他的“非数据流动框架”的组件需要析构吗
似乎是没有了,也就是说,对于river-node析构的本质其实是在于对该river-node自身所创建携程的销毁
数据流动框架会创建携程,都销毁后,再去进行其他组件所创建携程的销毁工作
但是如通过io打开文件,io包内部会开启携程,你不关闭文件的话,也会造成泄露
也就是说没有完成其他包的携程销毁工作,等同于没有完成你自己所设计的携程销毁工作
再之后如果没有其他组件在Construct()时创建过携程,或者有其他组件在Construct()时创建过携程你很快就直接把他们销毁了
那么当这些操作都完成时,就是析构完成了,在次重复一遍,目前看来无论对于哪种语言,哪种子线程的设计模式
销毁某个组件的意义在于销毁其所创建的子线程,反过来说,如果某个组件没有创建过任何线程
那么也就不需要为他设计Destruct()、Destory()这样的析构函数
创建了子线程是问题的根源且是唯一的根源
子线程无法退出的原因有很多,比如for循环,sleep,打开io文件(其实等同于对conn进行操作)等
再比如c++之所以设计析构函数,内部一般无外乎这几种操作:
- 销毁指针
- 关闭打开的io(关闭第三方包所创建的子线程) --是你创建了子线程
- 关闭这个“类”自身所创建的子线程 --是你创建了子线程
1.跳出子线程内部的持久化for结构
2.等待sleep操作结束(如有办法也可以让sleep提前结束)这同样等同于如上所述,关闭第三方包所创建的子线程
3.关闭io操作(关闭第三方包所创建的子线程)
4.销毁携程所创建的指针
最后在重复一遍,golang析构的唯一目的是,销毁当前“类”,“对象”,golang的“结构类”等这样的“自定义组件/自定义数据结果”自身所创建的子线程
ps:销毁指针的操作之存在于c++中,c++析构的目的有两个,销毁指针,销毁子线程