|
|
1
9
这两种解决方案之间没有太大区别。我倾向于每次创建线程的方式。 周围有一根线 消耗资源 (至少是记忆)。在垃圾回收语言中,可能很容易在这个线程中保留一些对象,从而使用更多的内存。如果你没有线程,所有资源都会被释放,并可供主进程使用两个小时。
当你想停止整个进程时,你的线程可能正在执行也可能没有执行,你需要
彻底中断线程
.总是很难中断一个线程或知道它是在睡觉还是在工作。你可能在那里有一些比赛条件。按需启动线程可以让你摆脱这些潜在的问题:你知道你是否启动了线程,在这种情况下调用
由于这些原因, 我会选择按需线程解决方案 ,尽管另一个没有难以解决的问题。 |
|
|
2
4
每两个小时启动一个线程非常便宜,所以我会这样做。 但是,如果在未来的某个时候,处理时间可能超过运行间隔,您可能希望保持线程活动。这样,您就不会在第一个线程仍在运行时创建第二个线程来开始处理记录,这可能会损坏数据或处理记录两次。 |
|
|
3
3
两者都可以,但我倾向于在验证时间比预期长的情况下(例如:网络链接缓慢或数据库响应缓慢)保留线程。 |
|
|
4
3
当两个小时结束时,你会怎么记住开始一个新的线程?有计时器吗?(这是在另一个线程上!)另一个在指定时间之前休眠的线程?如果其他线程位于它自己的独立线程上,或者在两个小时后等待“创建”工作线程时阻塞主应用程序,那么关闭线程并根据其他地方运行的东西重新启动它对你没有好处,不是吗? 让线程睡觉。.. |
|
|
5
1
我同意Vilx的观点,这主要是品味的问题。这两种方法都有处理和内存开销,但可能都不够重要。 |
|
|
6
1
如果您正在使用 Java 你可以查一下 定时器 类。它允许您在给定时间安排任务。 此外,如果你需要更多的控制,你可以使用石英库。 |
|
|
7
1
我想实际上让线程进入睡眠状态是最有效的,结束它并重新创建它会“消耗”一些资源,而让它进入睡眠状态只会在日程表中填充一点空间,而它的数据可以在需要时被操作系统分页。 但无论如何,这可能不是很大的区别,区别可能取决于操作系统的时间表有多好,等等。。。 |
|
|
8
1
据我所知,这真的取决于一件事。..国家。 如果线程创建了大量状态(分配内存),这些状态在线程运行的下一次迭代中很有用,那么我会保留它。这样,如果自上次运行以来某些事情发生了变化,您的流程可以通过仅执行某些操作来优化其运行。 但是,如果该过程创建的状态与要完成的工作量相比是重要的,并且机器上的资源短缺,那么在执行之间保持状态的成本可能不值得。如果是这样的话,那么每次都应该从头开始重新创建线程。 |
|
9
0
我认为这只是品味的问题。两者都很好。使用你觉得更容易实现的那个。 :) |
|
|
10
0
我会一次性创建线程,并使用事件/条件变量让它休眠,直到收到再次唤醒的信号。这样,如果所需的时间量必须改变,你只需要改变触发事件的时间,你的代码仍然会非常干净。 |
|
|
11
0
我不认为这很重要,但 最好的 这种方法非常依赖于平台。 A.NET系统。穿线。计时器在等待时不花费任何费用,并将在池线程上调用您的代码。理论上,这将是你两个建议中最好的一个。 |
|
|
12
0
如果你使用的是像Java这样的垃圾回收系统,另一件需要考虑的重要事情是,睡眠线程强烈引用的任何东西都不是垃圾。在这方面,最好杀死空闲线程,让它们以及它们引用的任何对象得到清理。 |
|
|
13
0
当然,这一切都取决于。但默认情况下,我会使用按需启动的单独进程(不是线程)。 |