为什么要在多线程进程中终止所有线程呢?

本文关键字:线程 终止 多线程 进程 为什么 | 更新日期: 2023-09-27 18:13:23

我所在的公司使用Visual Studio开发其网站及其所有功能,并且还开发了一个单独的站点用于测试该网站。这个"测试"站点可以针对网站运行单独的测试用例,并且必须为每个可能的用例运行。

一切都是用VB编写的。每次程序运行时,都会创建一个线程来运行测试。然而,在测试"结束"时,线程似乎仍然徘徊。必须手动单击Visual Studio中的停止按钮才能终止应用程序。此外,在应用程序关闭后,进程图标在任务栏中停留很长时间。

在我看来,程序没有正确地终止测试期间运行的所有线程,但我不确定这个问题是否值得在办公室提出,所以我问以下问题…

正确关闭应用程序及其上运行的所有线程的目的是什么?如果不这样做,后果是什么?

为什么要在多线程进程中终止所有线程呢?

现在这可能是一个小问题,但这不是一个好的做法,恕我之言。想象一下,如果相同的代码现在由持续集成服务器执行,例如,TeamCity(或Jenkins,或…),并且单元测试由所述构建服务器连续且自动地运行,将会发生什么。

当这些线程不能干净地关闭时,构建状态会发生什么?我们经常面临这个问题,这是由于线程中的糟糕设计决策,或者是由于单元测试代码中的简单(可能是愚蠢的)错误。然而,最终的结果是一个搁置的建造过程。

我见过CI服务器挂起了几乎半天,然后有人(谢天谢地)终止了构建过程。从本质上讲,这表明我们代码中的问题可能会或可能不会成为一个大问题。如果这是服务器端代码,则该代码有可能导致非常糟糕的情况。我的建议是找出你的自省工具包(内存分析,性能分析等),看看到底发生了什么,并解决它。

我们在应用服务器上调用一个应用程序来索引SPA页面时遇到了类似的问题。在某些情况下,它抛出了一个异常,线程没有关闭。最大的缺点是它会消耗服务器内存,这是不好的作为web应用程序运行的另一个缺点是,它将消耗可用端口,并在可用端口耗尽时停止运行。应该修改代码,以便在线程完成或出现异常时和平地终止线程,并报告任何异常。