问题标签 [executor]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - ExecutorService 多线程性能慢
我正在尝试执行一个简单的计算(它调用Math.random()
10000000 次)。令人惊讶的是,以简单的方法运行它比使用 ExecutorService 快得多。
我在ExecutorService 令人惊讶的性能收支平衡点上阅读了另一个线程 --- 经验法则?并尝试通过执行Callable
使用批处理来遵循答案,但性能仍然很差
如何根据我当前的代码提高性能?
此代码的输出
编辑:由于 Math.random() 是一种同步方法,性能受到影响。在为每个线程使用新的 Random 对象更改 Math.random() 后,性能得到了提高
新代码的输出(在将每个线程的 Math.random() 替换为 Random 之后)
python - 计算 futures.ThreadPoolExecutor 中的待处理任务
我正在寻找一种计算 python 3.2 futures.ThreadPoolExecutor 中待处理任务数量的方法。
直到知道,我有两个解决方案:1.-在提交时增加挂起任务的数量,并添加回调以在任务完成时减少计数 2.-保留期货列表并检查哪些仍处于未决状态
有没有更直接的(即执行者的属性或方法)?
提前致谢
java - 我不明白这个 ThreadPoolExecutor 行为
我有一个 ThreadPoolExecutor,它由一个无界队列(LinkedBlockingQueue)和一个核心和最大池大小设置为 cpu 数(比如 4)。
当我收到 RejectedExecutionException 时,每一次都很棒。Executor 处于运行状态。我的理解是这不应该发生在无界队列中。
我无法在调试器中捕捉到这一点,以查看到底发生了什么,但从堆栈跟踪来看,它看起来像在 ThreadPoolExecutor.execute 中,workQueue.offer 返回 false,所以它跳转到它尝试旋转的位开了一个新话题。但是 poolSize 已经是最大值了,所以它抛出了被拒绝的执行异常。
我不太明白这一点。
但无论如何,我应该让最大池大小比核心池大小大一点吗?
android - Eclipse for Android 应用程序中的执行程序服务问题
基本上,我正在为安卓手机开发 OpenGL 动态壁纸。这是我的壁纸服务类。
}
它可以在我的手机(三星 Galaxy S2)和其他几款手机上完美运行,但有报道称它无法加载。动态壁纸根本无法预览,即使是 Galaxy S1 机型!由于这适用于我的手机,我无法弄清楚它有什么问题。我没有无法运行该程序的手机,所以我无法解决问题。
谢谢回复。但我使用的是 OpenGL ES 1.0,正如您在 EGL10 中看到的那样……导入的 GL10。哦,但我看到我确实导入了一个 GL11(OpenGL 1.1),这可能导致了我想的问题??
java - 什么时候在 ThreadPoolExecutor 中指定单独的核心和最大池大小是个好主意?
我试图理解为 Java 5 的 ThreadPoolExecutor 指定单独的核心和最大池大小的要点。我的理解是,线程数只有在队列满后才会增加,这似乎有点晚了(至少对于更大的队列)。
是不是我很乐意为任务分配更多的线程,在这种情况下我可能只是增加核心池的大小;或者我不太愿意这样做,在这种情况下我应该有一个更大的队列?什么是单独的核心和最大池大小有用的场景?
java - 实现生产者消费者模式
我正在尝试编写一个邮件实用程序,将邮件放入队列中,然后由消费者线程使用。
我正在尝试实现一个典型的生产者-消费者模式,但是出了点问题。
我刚写了一个骨架,骨架没有按预期工作。
MailProducer.java
邮件消费者.java
最后是执行者
MailExecutor.java
现在,当我运行程序时,我希望它在生产者和消费者之间来回切换,以继续打印各自类中编写的内容。但相反,程序在打印以下行后挂起/不执行任何操作。出了什么问题?我错过了什么吗?
输出 ......(输出不是我所期望的。出了什么问题?)
java - Java Executor,在队列底部/末尾添加新任务
我希望有一个 Executor 可以选择是在队列的顶部还是底部添加新任务。实现这一目标的最简单方法是什么?
java - Java Executor 部分关闭
让我们有一个经典Executor
的应用程序。应用程序的许多部分使用这个执行器进行一些计算,每个计算都可以取消,为此我可以调用shutdown()
或shutdownNow()
在执行器上。
但我只想关闭 Executor 中的部分任务。可悲的是我无法访问Future
对象,它们是计算实现的私有部分(实际上计算由演员框架jetlang支持)
我想要像 Executor wrapper 这样的东西,我可以将它传递给计算,并且应该由真正的 Executor 支持。像这样的东西:
还是有其他想法?
java - 为指定时间安排 Java 任务
我希望能够在 Java 中的特定时间安排任务。我知道ExecutorService
有能力定期安排,并在指定的延迟之后,但我更多的是在一天中的某个时间而不是在一段时间之后。
有没有办法Runnable
在 2:00 执行,或者我需要计算从现在到 2:00 之间的时间,然后安排 runnable 在该延迟之后执行?
java - Java 调度执行器的准确性
我在使用 Java 调度执行程序时遇到了一个特殊情况,我想知道我所经历的是否正常。
我需要安排以 5 秒的预定义速率执行的任务。预计这些任务有时会花费超过 5 秒的时间来执行,但是当运行它们的时间低于 5 秒时,备份的任务列表应该快速连续运行以赶上。运行任务时,了解最初计划的执行时间是很重要的(请scheduledExecutionTime()
参见参考资料java.util.TimerTask
)。最后,我需要跟踪预定时间和实际时间之间的差异,以确定时间表何时“漂移”以及偏离了多少。
到目前为止,我已经使用 Java 执行器实现了所有这些,下面的类说明了总体思路:
运行上面列出的代码表明,漂移(理想情况下应该尽可能接近 0)波动多达几秒钟,其结果是任务执行过早或延迟。我根据运行大约 150 分钟的结果创建了一个图表:
所以我的第一个问题是这是否正常。我的环境由 32 位 Windows XP 和 Java 1.5 update 21 组成(尽管 Java 6 update 22 产生了类似的结果)。
第二个问题是是否有一种简单的方法可以减少漂移量。如果我使用简单java.util.Timer
甚至只是Thread.sleep()
,漂移是不存在的。
最后,在使用调度执行器时是否有更好的方法来跟踪调度执行时间?