- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
希望这是一个比我之前的问题更好的问题。我有一个 .exe,我将向其传递不同的参数(文件路径),然后它将接受并解析。所以我将有一个循环,遍历列表中的文件路径并将它们传递给这个 .exe 文件。
为了提高效率,我想将执行分散到多个内核上,我认为您可以通过线程来完成。
我的问题是,我应该使用线程池还是多个线程来异步运行此 .exe?
另外,根据你们认为哪一个是最好的,如果你能给我指一个教程,里面有一些关于我想做什么的信息。谢谢!
编辑:我需要将 .exe 的执行次数限制为每个核心执行一次。这是最有效的,因为如果我要解析 100,000 个文件,我不能只启动 100,000 个进程。因此,我使用线程将一次执行的次数限制为每个核心一次执行。如果有另一种方法(线程除外)可以查明处理器是否未被执行,或者 .exe 是否已完成,请解释。但如果没有其他方法,我的最终问题是如何使用线程调用解析方法,然后在该线程不再使用时回调?
第二次更新(非常重要):
我仔细研究了每个人告诉我的内容,发现了一个我遗漏但我认为无关紧要的关键要素。所以我正在使用 GUI,我不希望它被锁定。这就是为什么我想使用线程。我现在的主要问题是,如何从线程发回信息以便知道执行何时结束?
最佳答案
正如我在回答您之前的问题时所说,我认为您不了解进程和线程之间的区别。过程非常“繁重”(*);每个进程可以包含多个线程。如果您从父进程生成新进程,则该父进程不需要创建新线程;每个进程都有自己的线程集合。
如果所有工作都在同一个进程中完成,则只在父进程中创建线程。
将线程想象成一个 worker ,将一个进程想象成一个包含一个或多个 worker 的建筑物。
一种策略是“ build 一座建筑物,并在其中安置十名 worker ,每人做一些工作”。您得到构建一个进程和十个线程的费用。
如果您的策略是“ build 一座建筑物。然后让该建筑物中的一名 worker 下令 build 一千多座建筑物,每座建筑物都包含一名执行其投标的 worker ”,那么您将获得 build 1001 座建筑物的费用并雇用 1001 名 worker 。
您不想追求的策略是“ build 一座建筑物。在该建筑物中雇用 1000 名 worker 。然后指示每个 worker build 一座建筑物,然后让一名 worker 去做真正的工作工作。”创建一个线程的唯一工作是创建一个进程,然后创建一个线程是没有意义的!你有 1001 栋建筑和 2001 名 worker ,其中一半立即闲置但仍需支付工资。
看你的具体问题:关键问题是“瓶颈在哪里?”产生新进程或新线程只有在性能问题是处理器上的性能问题时才有帮助。如果解析器的性能不是取决于解析文件的速度,而是取决于从磁盘中取出文件的速度,那么并行化它会使事情变得更糟。您将拥有大量的系统资源,用于同时对同一个磁盘 Controller 进行所有锤击,并且磁盘 Controller 会随着负载的增加而变慢。
I need to limit the number of executions of the .exe to ONE execution PER CORE. This is the most efficient because if I am parsing 100,000 files I can't just fire up 100000 processes. So I am using threads to limit the number of executions at one time to one execution per core. If there is another way (other than threads) to find out if a processor isn't tied up in execution, or if the .exe has finished please explain
这似乎是一种非常复杂的方法。假设您有 n 个处理器。据我了解,您提出的策略是启动 n 个线程,然后让每个线程启动一个进程,并且您知道由于操作系统可能为每个 CPU 调度一个线程,因此 不知何故 处理器也会神奇地在不同的 CPU 上安排每个新进程中的新线程?
这似乎是一个曲折的推理链,取决于操作系统的实现细节。这太疯狂了。 如果你想设置特定进程的处理器关联,只需set the processor affinity on the process ! 不要用线程做这种疯狂的事情并希望它能成功。
我说的是,如果您希望运行的可执行文件的实例不超过 n 个,每个处理器一个,则根本不要乱用线程。相反,只让一个线程处于循环中,constantly monitoring what processes are running .如果运行的可执行文件的副本少于 n 个,则生成另一个副本并将其处理器亲和性设置为您最喜欢的 CPU。如果有 n 个或更多的可执行文件副本正在运行,请休眠一秒钟(或一分钟,或任何有意义的时间),当您醒来时,再次检查。继续这样做,直到你完成。这似乎是一种更简单的方法。
(*) 线程也很重,但比进程轻。
关于c# - 最好使用多线程? (线程池或线程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6630560/
所以这只是一个好奇的问题。 如果我想退回单位,哪个更好? |> ignore 或者 () 应该还有其他方法。考虑到这些,我只想知道什么是最好的: 什么是性能最高的 生产环境的最佳实践是什么 什么是长期
我如何(最好)将方法调用返回的Option转换为Try(通过首选项,尽管Either或scalaz \/甚至是Validation都可以),包括在适当时指定Failure值? 例如,我有以下代码,虽然
我读了第一本关于 C# 的书,但对 LINQ 完全一无所知。请推荐对读者友好的 linq Material 。 谢谢 最佳答案 LINQ in Action已经有好几个人向我推荐了。 关于c# - 从
这个问题已经有答案了: How to create a template in HTML? (3 个回答) 已关闭 7 年前。 我正在寻找一种将一个 html 文件包含在另一个 html 文件中的最佳
我有一个在线注册,可以将数据保存到托管的 mssql 数据库中......基本上我想做的是在本地服务器上运行日常例行程序,就像 Insert into Home.tableA Select * fro
我有文本文件要加载到数据框中。加载后,这些值都在一列中,格式如下: 0 Alabama[edit] 1 Auburn (something somethign) 2 Florence (somethi
例如:我有一个带有外键的“历史”表,它可能根据字段值指向不同的表/实体。 表历史: create table history( id int PimaryKey AUTO_INC, e
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 5 年前。 Improve this qu
我有业务对象(DEVELOPERS WRITE)和一些 SPROCS(DBA WRITE) 谁能推荐一个好的对象映射器来处理这种设置。 我尝试了 codesmith 和 nhibernate,但遇到了
我应该测试 if 某事是否有效,还是只测试 try 来执行它并捕获异常? 是否有任何可靠的文档表明首选一种方法? 还有一种方式 pythonic? 例如,我应该: if len(my_list) >=
在 Java 中遍历字符串字符的一些方法是: 使用 StringTokenizer? 将 String 转换为 char[] 并对其进行迭代。 最简单/最好/最正确的迭代方式是什么? 最佳答案 我使用
我是一个真正的 Erlang 新手(1 周前开始),我正在尝试通过创建一个小而高效的聊天服务器来学习这种语言。 (当我说高效时,我的意思是我有 5 台服务器用于对数十万连接的客户端进行压力测试 - 一
这个问题已经有答案了: How to access the correct `this` inside a callback (15 个回答) 已关闭 5 年前。 我正在使用 NPM 包 prompt
到目前为止我已经做了一些测试(例如 RPC)接下来我来到多分页部分,到目前为止我读到的内容中有很多选项: MVP、布局、UIbind。 现在我真的不知道该选择哪个,哪个既简单又好。 我尝试清除我的根面
我们正在寻找我们能找到的最好的基于 jQuery 的用户界面库。它不一定是免费的。人们在使用什么? 我们使用过jQueryUI ,但发展似乎已经停滞。很长一段时间以来没有太多新东西。 jQuery T
我是 OpenCL 编程的初学者。我的 PC 装有 Windows 8.1,配备英特尔显卡和 AMD Radeon 7670。当我搜索下载 OpenCL SDK 和示例 helloworld 程序时,
我从人们那里得到的印象是...除非与 process.nextTick 一起使用,否则所有 JavaScript 函数都是同步的。什么时候使用它最好? 我想确保我不会在不需要它的地方过度使用它。在这一
我有一个单词列表,我想对其进行过滤,这样我就只有该单词列表中的名词(使用 Java)。为此,我正在寻找一种简单的方法来查询单词数据库的类型。 我的问题是有没有人知道一个免费、简单的单词查找 API,它
我想开发一个新的 iPhone 应用程序,我之前开发了一个应用程序,但被应用程序商店拒绝了,因为我使用的 StoryBoard 在之前的 iOS 4.3 中不起作用,所以我改用了 XIB。 现在最低版
我正在尝试制作注册表,我只想在其中注册特定域的电子邮件。例如我只想注册来自 companyX、companyY、companyZ 的电子邮件。 因此可接受的电子邮件将是:- myname@compan
我是一名优秀的程序员,十分优秀!