gpt4 book ai didi

ruby - 线程对这种情况有益吗?

转载 作者:太空宇宙 更新时间:2023-11-03 17:55:25 25 4
gpt4 key购买 nike

我有一个超过100万行的CSV文件。我也有一个数据库,该数据库以格式化的方式包含此类数据。

我想检查并验证CSV文件中的数据和数据库中的数据。

从CSV文件中进行线程读取并使用到数据库的连接池是否有益/减少了时间?

Ruby处理线程的情况如何?

我也在使用MongoDB。

最佳答案

很难说,如果不知道有关某些人想要发起此比较时您想要的应用程序的特定细节的更多详细信息。因此,要回答,无论您想线程出现什么问题,都应该可以很好地应用一些一般性建议。

线程不会降低计算成本

就计算时间而言,线程化不会使事情的成本降低。它只是让两件事并行发生。因此,请注意,您不会陷入一个普遍的误解,即“线程使我的应用程序运行更快,因为用户无需等待。” -这是不正确的,线程实际上增加了很多复杂性。

因此,如果启动此数据库与CSV比较任务,则线程化将不会使该比较花费更少的时间。它可以做的是让您立即在一个单独的执行线程中进行比较的同时,告诉用户“好吧,我要为您检查一下”。比较完成后,您仍然必须弄清楚如何与用户联系。

考虑一下为什么要线程化,而不是简单地将其视为线程对于长任务是否是一个好的解决方案

就像我上面说的,线程并不能使事情变得更快。充其量,它以更有效的方式或提供更好的用户体验,或两者兼而有之的方式使用计算资源。

如果应用程序的用户(也许只是您)不介意等待比较运行,则不要添加线程,因为这只会增加复杂性,而且速度不会更快。如果此比较需要很长时间,并且您希望“在后台进行”,那么线程可能是的答案。请注意,如果执行此操作,则会添加另一个问题,即完成后台作业后如何更新用户?

线程化会带来额外的开销和应用程序复杂性,然后您必须在应用程序中进行管理-轻而易举

还存在其他问题,例如,如何调度该工作线程以确保它不会占用计算资源?在我的环境中,线程优先级的设置是否是一个选项?如果可以,调整线程优先级将如何影响计算资源的使用?

线程和所涉及的额外开销几乎肯定会使您的比较花费更长的时间(就绝对时间而言)。真正的好处是,如果您不关心完成时间(比较开始到完成之间的时间),而无需担心应用程序对用户的响应能力和/或可以实现的总吞吐量(例如,您可以运行的同时比较的数量,因此可以在给定的时间段内完成比较的总数)。

线程无法保证有效使用可用的CPU内核

请参阅Green Threads与 native 线程-一些语言(取决于它们的线程实现)可以调度跨CPU的线程。

线程不一定意味着您的线程最终会在多个物理CPU内核中运行-实际上,在许多情况下,它们肯定是不会是。如果您所有应用程序的线程都在同一物理核心上运行,那么它们并不是真正并行运行的-它们只是以某种方式分配CPU时间,使它们看起来像是在并行运行。

由于这些原因,根据应用程序的结构,将后台任务发送到单独的工作程序进程(进程而不是线程)通常较不复杂,可以轻松地将其调度到操作系统级别的可用CPU内核上。单独的进程(与单独的线程相对)也消除了应用程序中的许多调度问题,因为您实际上将有关如何将事情调度到OS本身的决策转移了下来。

最后一点很重要。 OS调度程序比您在应用程序中可能想到的任何算法都更聪明,更高效地设计。

关于ruby - 线程对这种情况有益吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15005562/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com