- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
首先,我对for标题表示歉意,因为它可能无法很好地描述问题。我无法提出更好的选择。
我将使用一个简单示例说明我要解决的实际问题。
核心是一个基准,该基准被“之前”和“之后”调用包围,它们记录了基准的相关信息。我记录的东西的明显例子是当前时间戳,但是还有很多有趣的东西,例如周期计数,内存使用等等。我将记录这些值的动作称为标记,所以我们有这样的东西:
Stamp before = stamper.stamp();
// benchmark code goes here
Stamp after = stamper.stamp();
// maybe we calculate (after - before) here, etc
std::chrono::high_resolution_clock
计算挂钟时间。我们可能想使用
clock(3)
等来计算CPU时间。我们可能想使用平台特定的性能计数器来计算执行的指令数和分支的错误预测。
stamper
对象,该对象的
stamp()
方法记录所有必要的度量,然后可以将其转换为度量。
/* something that can take a measurement */
struct Taker {
/* return the value of the measurement at the
current instant */
virtual double take() = 0;
};
// a Stamp is just an array of doubles, one
// for each registered Taker
using Stamp = std::vector<double>;
class Stamper {
std::vector<Measurement> takers;
public:
// register a Taker to be called during stamp()
// returns: the index of the result in the Stamp
size_t register_taker(Taker* t) {
takers.push_back(t);
return takers.size() - 1;
}
// return a Stamp for the current moment by calling each taker
Stamp stamp() {
Stamp result;
for (auto taker : takers) {
result.push_back(taker->take());
}
}
}
Taker
实现(包括仅在像这样的参数中有所变化的度量的有状态共享实现):
struct ClockTaker : public Taker {
double take() override { return clock(); }
}
struct PerfCounterTaker : public Taker {
int counter_id;
double take() override { return read_counter(counter_id); }
}
Metric
接口和实现1,它们知道它们需要哪些度量以及如何注册正确的
Taker
对象并使用结果。一个简单的例子是时钟指标:
struct Metric {
virtual void register_takers(Stamper& stamper) = 0;
double get_metric(const Stamp& delta) = 0;
}
struct ClockMetric : public Metric {
size_t taker_id;
void register_takers(Stamper& stamper) {
taker_id = stamper.register_taker(new ClockTaker{});
}
double get_metric(const Stamp& delta) {
return delta[taker_id];
}
}
Takers
,例如两个性能计数器的比率:
class PerfCounterRatio : public Metric {
int top_id, bottom_id;
size_t top_taker, bottom_taker;
public:
PerfCounterRatio(int top_id, int bottom_id) : top_id{top_id}, bottom_id{bottom_id} {}
void register_takers(Stamper& stamper) {
top_taker = stamper.register_taker(new PerfCounterTaker{top_id });
bottom_taker = stamper.register_taker(new PerfCounterTaker{bottom_id});
}
double get_metric(const Stamp& delta) {
return delta[taker_id];
}
}
stamp()
中发生的事件也越多,测量中的开销和噪声也就越大。 。
take()
的返回类型与
Taker
的接口或其他“单个”选项受限制。通常,不同的
double
对象可能具有自然代表结果的不同类型,并且它们希望使用它们。仅在最后,例如,在
Taker
中,我们需要转换为通用的数字类型以进行显示(或者甚至不需要,因为多态打印代码可以处理不同的类型)。
get_metric
和
Metric
实例具有多对多关系,但是我希望进行最少的测量。
Measurement
方法应尽可能高效,但其他方法的效率无关紧要。
stamp()
示例中的
top_id
和
bottom_id
)与存储状态a的对象混合在一起与
PerfCounterMetric
的特定交互(例如,记录我们期望在哪个位置找到结果的
Stamper
状态)。它们在逻辑上是分开的,并且具有不同的多重性(定义类只需要在整个流程范围内存在一次),因此我们也可以将它们分开。
最佳答案
如果我正确阅读了您的描述,那么您想要的是同步惰性事件系统。
class event
{
public:
using callback_t = std::function<void(double)>;
event() = default;
event(std::function<double()> driver)
: driver{std::move(driver)} {}
void subscribe(callback_t c)
{
callbacks.push_back(std::move(c));
}
void execute()
{
if(callbacks.size() > 0)
{
auto d = driver();
for(auto& c : callbacks)
c(d);
}
}
private:
std::vector<callback_t> callbacks;
std::function<double()> driver;
};
events
中有一个
Stamper
列表,并且订阅是一个简单的查询
class Stamper
{
void stamp()
{
for(auto& [_, e] : events)
e.execute();
}
// ...
std::unordered_map<std::string, event> events;
};
struct PerfCounter
{
PerfCounter(Stamper& s)
{
s.events["perf"].subscribe([&](double d){ perf = d; });
s.events["counter"].subscribe([&](double d){ counter = d; });
}
double perf, counter;
};
关于c++ - 多对多请求/结果模式的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56622416/
对此感到疯狂,真的缺少一些东西。 我有webpack 4.6.0,webpack-cli ^ 2.1.2,所以是最新的。 在文档(https://webpack.js.org/concepts/mod
object Host "os.google.com" { import "windows" address = "linux.google.com" groups = ["linux"] } obj
每当我安装我的应用程序时,我都可以将数据库从 Assets 文件夹复制到 /data/data/packagename/databases/ .到此为止,应用程序工作得很好。 但 10 或 15 秒后
我在 cc 模式缓冲区中使用 hideshow.el 来折叠我不查看的文件部分。 如果能够在 XML 文档中做到这一点就好了。我使用 emacs 22.2.1 和内置的 sgml-mode 进行 xm
已结束。此问题不符合 Stack Overflow guidelines .它目前不接受答案。 我们不允许提出有关书籍、工具、软件库等方面的建议的问题。您可以编辑问题,以便用事实和引用来回答它。 关闭
根据java: public Scanner useDelimiter(String pattern) Sets this scanner's delimiting pattern to a patt
我读过一些关于 PRG 模式以及它如何防止用户重新提交表单的文章。比如this post有一张不错的图: 我能理解为什么在收到 2xx 后用户刷新页面时不会发生表单提交。但我仍然想知道: (1) 如果
看看下面的图片,您可能会清楚地看到这一点。 那么如何在带有其他一些 View 的简单屏幕中实现没有任何弹出/对话框/模式的微调器日期选择器? 我在整个网络上进行了谷歌搜索,但没有找到与之相关的任何合适
我不知道该怎么做,我一直遇到问题。 以下是代码: rows = int(input()) for i in range(1,rows): for j in range(1,i+1):
我想为重写创建一个正则表达式。 将所有请求重写为 index.php(不需要匹配),它不是以/api 开头,或者不是以('.html',或'.js'或'.css'或'.png'结束) 我的例子还是这样
MVC模式代表 Model-View-Controller(模型-视图-控制器) 模式 MVC模式用于应用程序的分层开发 Model(模型) - 模型代表一个存取数据的对象或 JAVA PO
我想为组织模式创建一个 RDF 模式世界。您可能知道,组织模式文档基于层次结构大纲,其中标题是主要的分组实体。 * March auxiliary :PROPERTIES: :HLEVEL: 1 :E
我正在编写一个可以从文件中读取 JSON 数据的软件。该文件包含“person”——一个值为对象数组的对象。我打算使用 JSON 模式验证库来验证内容,而不是自己编写代码。符合代表以下数据的 JSON
假设我有 4 张 table 人 公司 团体 和 账单 现在bills/persons和bills/companys和bills/groups之间是多对多的关系。 我看到了 4 种可能的 sql 模式
假设您有这样的文档: doc1: id:1 text: ... references: Journal1, 2013, pag 123 references: Journal2, 2014,
我有这个架构。它检查评论,目前工作正常。 var schema = { id: '', type: 'object', additionalProperties: false, pro
这可能很简单,但有人可以解释为什么以下模式匹配不明智吗?它说其他规则,例如1, 0, _ 永远不会匹配。 let matchTest(n : int) = let ran = new Rand
我有以下选择序列作为 XML 模式的一部分。理想情况下,我想要一个序列: 来自 my:namespace 的元素必须严格解析。 来自任何其他命名空间的元素,不包括 ##targetNamespace和
我希望编写一个 json 模式来涵盖这个(简化的)示例 { "errorMessage": "", "nbRunningQueries": 0, "isError": Fals
首先,我是 f# 的新手,所以也许答案很明显,但我没有看到。所以我有一些带有 id 和值的元组。我知道我正在寻找的 id,我想从我传入的三个元组中选择正确的元组。我打算用两个 match 语句来做到这
我是一名优秀的程序员,十分优秀!