【问题标题】:Is it a good idea to multi-thread a program that its main function is to read from the disk?多线程一个主要功能是从磁盘读取的程序是一个好主意吗?
【发布时间】:2017-03-16 18:38:36
【问题描述】:

我正在开发一个程序,它从磁盘读取多个大页面并执行多个范围搜索。程序从几个页面读取,然后将查询结果写入输出页面。我必须保持输出的顺序,使其与输入的顺序相对应。

但是,程序在多次读取后变得很慢,我正在考虑使用多线程程序一次运行多个搜索。我有 4 核 Linux 机器,我想有两个程序线程。这是个好主意吗?以及如何维护输出文件的顺序?锁无济于事,因为我不知道哪个线程会先完成。

如果这是个好主意,我该怎么做?

谢谢

更新:这必须在不使用任何类型的 SQL 库的情况下完成。

【问题讨论】:

  • 程序是否花费更多时间读取文件或处理数据?如果阅读,多核将无济于事。获取多个磁盘或 SSD 可能会有所帮助。
  • 阅读是问题

标签: c++ multithreading io stream bigdata


【解决方案1】:

在这种情况下,线程显然是一个好主意。 为了保持结果中的顺序,我将使用 mapReduce 方法,您可以使用 Qt 中的 qtConcurrent 模块找到一些很好的帮助。 这个想法是您获取一个或多个页面并将它们传递给一个线程,该线程将在列表中返回搜索结果。 每个线程/任务都会有一个唯一的索引,所以最后从索引为 2 的线程返回的列表将放在索引为 1 的线程返回的列表之后。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    • 1970-01-01
    相关资源
    最近更新 更多