时间问题时异步http请求/多线程

时间:2015-05-13 14:17:34

标签: multithreading http asynchronous request

以下是我要解决的问题:

  • 我(比方说)我在远程服务器上查询了100个不同的数据来源

  • 我需要在收到数据后尽快处理这些数据(数据很快就会过时)

  • 处理时间和查询时间不确定

  • 我想最大化我在给定时间段内处理的数据量。约束只在我的本地程序和机器上(远程服务器非常有效,而不是我的关注)。

以下是天真的做法:

对于每个数据源:

  • 对此来源的数据执行阻止查询

  • 处理数据

显然,这不能解决我的问题,因为有很多停机时间(在每次查询期间,cpu都处于空闲状态)

这是一个更好的方法:

对于每个数据源 s_i

  • 对下一个数据源执行非阻塞查询( s_i + 1

  • 等待收到 s_i 的数据(来自for循环的上一次运行)

  • 检查数据是否太旧(比如说在5秒前收到)。如果太旧,请再次对 s_i 进行阻止查询

  • 处理数据

这种方法更好一点,停机时间更短。 我还可以通过最多n个步骤而不是下一个步骤进行查询来改进此方法。我应该使用n足够低,以便在我处理它们时,查询的结果不会过时,但是足够高,以便几乎没有停机时间。

此方法仍不理想,因为如果在查询 s_i 之前收到 s_i + 1 的查询,我将等待处理 S_I

我目前的解决方案

我使用100个线程(每个数据源1个)。每个线程在无限循环中执行以下操作:

  • 获取信号量 querySemaphore

  • 启动阻止查询

  • 获取互斥锁(锁定) processorTimeLock

  • 处理数据

我认为这种方式更好,因为我不会不必要地阻止等待长查询。

如何改进?

这就是我一直在做的事情。但是,我有一种强烈的感觉,这不是最佳的,应该有一个更好的解决方案,这个问题感觉像一个常见的问题。 有人有想法吗?任何帮助非常感谢!

0 个答案:

没有答案