问题标签 [threadpool]

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.

0 投票
4 回答
2349 浏览

multicore - 同步与异步编程

在设计服务器时,我们正在考虑两种方法:

  1. 一种异步(基于选择)方法,因此后端 rpc 可以在单个线程中并行化。

  2. 一种同步方法,其中每个后端 rpc 在线程池中的另一个线程中处理。

需要权衡取舍:1 具有更好的性能,2 具有更少的代码复杂度。1 现在对于多核和 64 位的机器真的很重要吗?

0 投票
2 回答
4207 浏览

c# - 线程和 lambda 表达式

下面两段代码有什么区别?使用第二个会有什么问题吗?

场景一:

方案 2

在场景 2 中,我没有将异常作为参数传递给 ThreadPool。异常对象的线程编组是如何发生的?会不会有什么问题?如果有的话,这样做有什么限制?最大的优势是您可以非常轻松地传入任意数量的参数。

0 投票
2 回答
1030 浏览

c# - 客户端监控键盘记录问题

首先,我正在开发的键盘记录器根本不是出于攻击性和破坏性目的。:)

我正在用 C#.NET 开发一个客户端监控应用程序。键盘记录是我的应用程序中的功能之一。虽然我已经开发了键盘记录器的代码,但我无法在我的应用程序中正确实现它。

我的解决方案中有两个项目。UserInterface - 用于服务器端。跟踪器 - 用于客户端 PC。键盘记录模块 Keylogger 位于 Tracker 项目中。

我已经使用辅助类进行套接字编程 - TcpClient、TcpListener 和 NetworkStream 来帮助他们。

另外,我正在使用异步模式进行通信。

我正在发布我面临问题的代码部分:

private void btnKeyLog_Click (对象发送者,EventArgs e) { messageBuffer = new byte[100];

现在,客户端代码:

我试图解释这里的情况。要启动键盘记录,服务器 UI 将向客户端发送消息“StartKeyLog”。客户端收到消息后,会在回调函数“onDataReceived”中进行处理。在这个函数中,消息被处理,

installHook() 方法被调用,它将安装钩子。

当我运行应用程序时,钩子就安装好了;此外,正确调用了 KeyboardHookProc() 回调,并处理了击键。但是这个

只有在 onDataReceived 回调方法有效之前才会出现这种情况。该方法一结束,KeyboardHookProc() 就停止被调用;钥匙

不再处理,就好像从未安装过钩子一样。

另一个问题是,在安装挂钩后,当我按任何键时系统变得相当慢。

我的假设是这两件事都与这里发生的线程有关。但是,我无法得到确切的问题。我已尽力解释情况。不过,欢迎提出任何问题。谁能给我解决方案??

0 投票
2 回答
3974 浏览

.net - 通过 ThreadPool 循环时,我的 ThreadStatic 变量中的值是否仍然存在?

我正在使用 ThreadStatic 变量来存储一些数据,但我担心我存储在线程上的数据在我完成并释放回 ThreadPool 后仍然存在。在完成线程之前,我是否需要担心清除我的 ThreadStatic 变量?或者 ThreadPool 会在为下一个 QueueUserWorkItem “传递出去”之前为我做这件事吗?这对我来说尤其重要,因为我需要确保我的应用程序中的其他线程在 ThreadStatic 变量方面具有干净的工作状态。谢谢!

0 投票
3 回答
179 浏览

multithreading - 如何解决这个特定的线程问题

使用下面文章中的代码,我实现了一个自己的线程池:http: //www.developer.com/net/article.php/3783756

这就是我想要实现的目标:通过计时器触发,服务应每 5 秒查询一次数据库以执行新作业。Job 基本上只是有关需要使用参数运行的命令行程序的信息。

最多可以同时执行 50 个或更多这些程序。一个程序可以运行几秒钟、几分钟甚至几小时。服务需要始终控制这些程序,例如,它必须能够根据请求终止程序。

使用上面的 ThreadPool 实现,我开始对要执行的程序进行排队,并可以看到服务何时确实执行了它们。到目前为止没有问题。然而,这里的机制是这样工作的:

ThreadPool 创建一个工作线程并启动它。每当程序排队时,工作线程都会注意到这一点并调用一个委托,该委托实质上实例化了一个 System.Diagnostics.Process 对象并启动外部程序。然后线程完成了它的工作并且能够启动更多的程序。但是...当没有程序要启动时,空闲计时器会使线程管理器杀死线程,从而中断已启动的进程。

这不是我需要的。这里有人知道如何更好地处理我描述的场景吗?

0 投票
4 回答
2186 浏览

java - 使用 ThreadPoolExecutor 取消 SwingWorker

我正在使用线程池大小为 1 的 ThreadPoolExecutor 来顺序执行摇摆工作人员。我遇到了一个特殊情况,即一个事件到达,它创建了一个执行一些客户端-服务器通信的 swing worker,然后更新 ui(在 done() 方法中)。

当用户触发(单击项目)某些事件但如果发生许多事件时,这可以正常工作。但这发生了,所以我需要取消所有当前正在运行和计划的工作人员。问题是支持 ThreadPoolExecutor 的队列不知道 SwingWorker 取消过程(至少看起来是这样)。所以预定的工人会被取消,但已经在运行的工人不会。

所以我添加了一个类型的并发队列,<T extends SwingWorker>它保存所有工作人员的引用,只要它们没有被取消,并且当新事件到达时,它会在队列中的所有 SwingWorkers 上调用 .cancel(true) 并将新的 SwingWorker 提交给 ThreadPoolExecutor。

摘要: SwingWorkers 是在具有单个线程的 ThreadPoolExecutor 中创建和执行的。只有最后提交的工作人员才应该运行。

有没有其他方法可以解决这个问题,或者这样做是否“可以”?

只是好奇...

0 投票
5 回答
2710 浏览

c++ - 如何在等待时保持消息泵送?

我有一个基于消息泵线程池架构的应用程序。每当有可能阻塞的动作时,它都会被实现为“完成/触发 evnet 时的回调”动作,因此它不会停止正在执行的线程。

虽然这种技术适用于大多数情况,但在某些情况下它会变得非常不方便并且会使代码过于复杂。

我想做的是,在等待时以透明的方式继续处理事件,而不会将功能分解为等待前/等待后的部分。

我该怎么做?

我有两个选择:

  1. 在等待时从正在执行的函数中运行消息循环。
  2. 在等待时创建一个新的工作线程,并在恢复时(以适当的方式)终止它。

这两种选择都有其缺陷,仅举几例:

对于 1:

  • 可能会导致堆栈溢出。
  • 可能最终陷入僵局。
  • 如果内部消息导致等待第二个事件完成,而外部事件同时完成,则外部函数在第二个事件完成之前无法继续,这种情况可能会扩大。

选项 2 最终会导致创建越来越多的线程。

当然,可能还有其他我没有想到的选择。

编辑:语言是 C++,所以函数不能以简单(便携?)的方式进出。平台是 Windows (API),虽然我不认为它是相关的。

0 投票
9 回答
9754 浏览

java - 线程池运行Web服务请求的合理线程数

在 Java 中创建 FixedThreadPool Executor 对象时,您需要传递一个参数来描述 Executor 可以并发执行的线程数。我正在构建一个服务类,其职责是处理大量电话号码。对于每个电话号码,我需要执行 Web 服务(这是我的瓶颈),然后将响应保存在哈希图中。

为了减少这个瓶颈对我的服务性能的危害,我决定创建 Worker 类来获取未处理的元素并处理它们。Worker 类实现了 Runnable 接口,我使用 Executor 运行 Worker。

可以同时运行的Workers数量取决于Executor FixedThreadPool的大小。ThreadPool 的安全大小是多少?当我使用一些大数字作为参数创建 FixedTheradPool 时会发生什么?

0 投票
6 回答
10155 浏览

c# - 具有单独实例的 .NET 自定义线程池

什么是最推荐的 .NET 自定义线程池,它可以有单独的实例,即每个应用程序有多个线程池?我需要一个无限的队列大小(构建一个爬虫),并且需要为我正在爬的每个站点并行运行一个单独的线程池。

编辑:我需要尽快挖掘这些站点以获取信息,为每个站点使用单独的线程池将使我能够控制在任何给定时间在每个站点上工作的线程数。(不超过2-3个)

谢谢罗伊

0 投票
6 回答
3643 浏览

c++ - C++ 主/从

我正在寻找一个跨平台的 C++ master/worker 库或工作队列库。一般的想法是,我的应用程序将创建某种任务或工作对象,将它们传递给工作主机或工作队列,然后它们将在单独的线程或进程中执行工作。为了提供一些上下文,该应用程序是一个 CD ripper,我想要并行化的任务是“rip track”、“encode WAV to Mp3”等。

我的基本要求是:

  • 必须支持可配置数量的并发任务。
  • 必须支持任务之间的依赖关系,这样任务在它们所依赖的所有任务都完成之前不会执行。
  • 必须允许取消任务(或者至少不阻止我将取消编码到我自己的任务中)。
  • 必须允许将状态和进度信息报告回主应用程序线程。
  • 必须在 Windows、Mac OS X 和 Linux 上工作
  • 必须是开源的。

如果这个库也能:

  • 与 Qt 的信号/槽机制集成。
  • 支持使用线程进程来执行任务。

打个比方,我正在寻找类似于 Java 的 ExecutorService 或其他一些类似的线程池库的东西,但在跨平台 C++ 中。有人知道这样的野兽吗?

谢谢!