- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个超过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/
以下是一个非常简单的ruby服务器。 require 'socket' local_socket = Socket.new(:INET, :STREAM) local_addr = Socket.
我正在使用 OS X(使用 bash),并且是 unix 的新手。我想知道是否可以修改一些文件以便运行 ruby 程序,我不需要“ruby file.rb”,而是可以运行“ruby.rb”。 有理
我在用 Ruby 替换字符串时遇到一些问题。 我的原文:人之所为不如兽之所为。 我想替换为:==What== human does is not like ==what== animal does.
我想在一个循环中从 Ruby 脚本做这样的事情: 写一个文件a.rb(每次迭代都会改变) 执行系统(ruby 'a.rb') a.rb 将带有结果的字符串写入文件“results” a.rb 完成并且
我的问题是尝试创建一个本地服务器,以便我可以理解由我的新团队开发的应用程序。我的问题是我使用的是 Ruby 2.3.3,而 Gemfile 需要 2.3.1。我无法编辑 Gemfile,因为我被告知很
我有一个使用 GLI 框架用 Ruby 编写的命令行实用程序。我想在我的主目录中配置我的命令行实用程序,使用 Ruby 本身作为 DSL 来处理它(类似于 Gemfile 或 Rakefile)。 我
我的 Rails 应用 Controller 中有这段代码: def delete object = model.datamapper_class.first(:sourced_id =>
我正在寻找的解析器应该: 对 Ruby 解析友好, 规则设计优雅, 产生用户友好的解析错误, 用户文档的数量应该比计算器示例多, UPD:允许在编写语法时省略可选的空格。 快速解析不是一个重要的特性。
我刚开始使用 Ruby,听说有一种“Ruby 方式”编码。除了 Ruby on Rails 之外,还有哪些项目适合学习并被认可且设计良好? 最佳答案 Prawn被明确地创建为不仅是一个该死的好 PDF
我知道之前有人问过类似的问题,但是我该如何构建一个无需在前面输入“ruby”就可以在终端中运行的 Ruby 文件呢? 这里的最终目标是创建一个命令行工具包类型的东西。现在,为了执行我希望用户能够执行的
例如哈希a是{:name=>'mike',:age=>27,:gender=>'male'}哈希 b 是 {:name=>'mike'} 我想知道是否有更好的方法来判断 b 哈希是否在 a 哈希内,而
我是一名决定学习 Ruby 和 Ruby on Rails 的 ASP.NET MVC 开发人员。我已经有所了解并在 RoR 上创建了一个网站。在 ASP.NET MVC 上开发,我一直使用三层架构:
最近我看到 Gary Bernhardt 展示了他用来在 vim 中执行 Ruby 代码的 vim 快捷方式。捷径是 :map ,t :w\|:!ruby %. 似乎这个方法总是执行系统 Rub
在为 this question about Blue Ruby 选择的答案中,查克说: All of the current Ruby implementations are compiled to
我有一个 Ruby 数组 > list = Request.find_all_by_artist("Metallica").map(&:song) => ["Nothing else Matters"
我在四舍五入时遇到问题。我有一个 float ,我想将其四舍五入到小数点后的百分之一。但是,我只能使用 .round ,它基本上将它变成一个 int,意思是 2.34.round # => 2. 有没
我使用 ruby on rails 编写了一个小型 Web 应用程序,它的主要目的是上传、存储和显示来自 xml(文件最多几 MB)文件的结果。运行大约 2 个月后,我注意到 mongrel 进程
我们如何用 Ruby 转换像这样的字符串: 𝑙𝑎𝑡𝑜𝑟𝑟𝑒 收件人: Latorre 最佳答案 s = "𝑙𝑎𝑡𝑜𝑟𝑟𝑒" => "𝑙𝑎𝑡𝑜𝑟𝑟𝑒" s.u
通过 ruby monk 时,他们偶尔会从左侧字段中抛出一段语法不熟悉的代码: def compute(xyz) return nil unless xyz xyz.map {|a,
不确定我做错了什么,但我似乎弄错了。 问题是,给你一串空格分隔的数字,你必须返回最大和最小的数字。 注意:所有数字都是有效的 Int32,不需要验证它们。输入字符串中始终至少有一个数字。输出字符串必须
我是一名优秀的程序员,十分优秀!