【发布时间】:2014-10-19 08:07:29
【问题描述】:
我正在解析一个包含大量数据的金融市场数据源。
我将接收一个字符串并提取一个值,并将其存储在一个全局声明的变量中。
程序是这样工作的:当数据(字符串)到达时,调用一个线程。该线程检查与字符串一起传递的值以了解它是什么类型的字符串。
以我感兴趣的字符串为条件,我的问题是:
是将字符串传递到队列中进行解析还是直接在调用的线程中进行解析更好。
从概念上讲,我担心如果我要求被调用的线程做工作,那么它可能无法用于后续的市场数据事件,这些事件发生的频率很高,我会丢失数据。
如果我将字符串放入队列中,我当然需要另一个线程将项目从队列中弹出并解析它们。
我有一台速度非常快的 PC,速度是我的兴趣所在。董事会是否有经验并且知道这里的最佳方法是什么?
【问题讨论】:
-
“会丢失数据”是什么意思?消息是如何到达的?不会只是延迟一点吗?另外,我不确定您所说的“调用线程”是什么意思。为每条传入消息创建一个新线程并不是一个非常有效的解决方案。而是使用具有固定线程数的生产者-消费者队列。
-
在这里为我非常糟糕的词汇道歉。我是 C++ 新手。有一个 void 例程传递感兴趣的字符串和字符串类型的值。声明是:void CIBTraderDlg::tickString(TickerId tickerId, TickType tickType, const CString& value) 我已经需要一个关于 ticktype 的 IF。所以我不知道我是应该继续在这里解析字符串还是将其推入队列以由不同的线程解析。
-
抱歉,这并不能真正帮助我理解您在做什么。是否可以发布一些相当小的代码示例,让我们了解您的设置。省略所有不相关的功能,只保留您当前的设计框架。
-
根据您的最后一条评论,您似乎已经在使用一些已经存在的代码库或一些现有的 3rd 方库。这类问题完全取决于每个特定情况。对于每种给定的情况,没有通用的“这是最好的方法”的答案,这始终是正确的,并且始终适用于当前在太阳系第三工厂使用的每个软件库、平台、操作系统。在这里得到答案的唯一方法是尝试不同的方法,并运行一些基准来确定哪一个产生最快的结果。
-
感谢你们,是的,这是我正在编辑的 API 示例应用程序。我不控制接收请求市场数据的消息以确保安全的功能,每次数据到达时都会自动调用此例程。我需要解析和使用字符串。我是所有这一切的新手,我希望你在需要处理大量数据时如何处理这些情况是一个干净的“对或错”。