提交 4f7fdb01 编写于 作者: 丁劲犇's avatar 丁劲犇 😸

消息缓存的策略控制参数 instance::batchtime 控制缓存消息的时间窗口,以便在满足实时性的同时微调吞吐性能。

上级 23f7e0bb
......@@ -214,6 +214,17 @@ bool taskCell::initFromJson(const QByteArray & json, const QString & path)
m_idxs<<std::shared_ptr<tag_titem>(item_2_exec);
m_idxparas[item_2_exec] = item_1_instance->children.size()-1;
tag_titem * item_2_batchtime = new tag_titem {
item_1_instance,
QVector<tag_titem*>(),
QVector<QString>()<<depth0_strFunctionName
<<"instance"<<"batchtime"
};
item_1_instance->children.push_back(item_2_batchtime);
m_idxs<<std::shared_ptr<tag_titem>(item_2_batchtime);
m_idxparas[item_2_batchtime] = item_1_instance->children.size()-1;
tag_titem * item_2_additional_args = new tag_titem {
item_1_instance,
QVector<tag_titem*>(),
......@@ -230,6 +241,8 @@ bool taskCell::initFromJson(const QByteArray & json, const QString & path)
["instance_value"] = 0;
m_mainBlock[depth0_strFunctionName]["instance"]
["exec"] = path;
m_mainBlock[depth0_strFunctionName]["instance"]
["batchtime"] =20;
m_mainBlock[depth0_strFunctionName]["instance"]
["additional_args"] = "";
}
......@@ -350,10 +363,36 @@ unsigned int taskCell::set_function_instance(const QString & func,
return -1;
if (m_mainBlock[func].contains("instance")==false)
return -1;
oldins = m_mainBlock[func]["instance"]["instance_value"].toUInt();
m_mainBlock[func]["instance"]["instance_value"] = instance;
return oldins;
}
//获取模块批次间隔 Get the module batch time
unsigned int taskCell::function_batchtime(const QString & func) const
{
if (m_mainBlock.contains(func) == false)
return 10;
if (m_mainBlock[func].contains("instance")==false)
return 10;
if (m_mainBlock[func]["instance"].contains("batchtime")==false)
return 10;
return m_mainBlock[func]["instance"]["batchtime"].toUInt();
}
//设置模块批次间隔 Set the module batch time
unsigned int taskCell::set_function_batchtime(const QString & func
, unsigned int btm)
{
unsigned int oldbatch = 0;
if (m_mainBlock.contains(func) == false)
return -1;
if (m_mainBlock[func].contains("instance")==false)
return -1;
oldbatch = m_mainBlock[func]["instance"]["batchtime"].toUInt();
m_mainBlock[func]["instance"]["batchtime"] = btm;
return oldbatch;
}
//功能的所有接口
const QStringList taskCell::in_subjects(const QString & func) const
{
......
......@@ -107,6 +107,11 @@ public:
//设置模块功能的可执行文件路径 Set the executable file path for module
virtual QString set_function_exec(const QString & func
, const QString & execstr);
//获取模块批次间隔 Get the module batch time
virtual unsigned int function_batchtime(const QString & func) const ;
//设置模块批次间隔 Set the module batch time
virtual unsigned int set_function_batchtime(const QString & func
, unsigned int btm) ;
/*!
*接口属性读写
* Module interface Properties read/write
......
......@@ -147,6 +147,7 @@ void taskNode::slot_started()
int nic = vm["nice"].toInt();
TASKBUS::set_proc_nice(m_process,nic);
}
m_nBatchTime = m_pCell->function_batchtime(m_pCell->function_firstname());
}
tb_watch_dog().watch(m_process);
......@@ -252,12 +253,20 @@ void taskNode::emit_message(QByteArray arred)
//Prevent of too short freq.
clock_t curr_ck = clock();
bool keep = false;
if (curr_ck-last_ck <=CLOCKS_PER_SEC/10 && curr_ck-last_ck>=0)
keep = true;
last_ck = curr_ck;
if (m_nBatchTime>0)
{
long long delta = curr_ck-last_ck;
delta *=1000;
delta /= CLOCKS_PER_SEC;
if (delta <=m_nBatchTime && curr_ck-last_ck>=0)
keep = true;
}
m_arr_Strerr.push_back(arred);
if (false==keep)
{
flush_from_stderr();
last_ck = curr_ck;
}
}
/*!
......@@ -273,12 +282,20 @@ void taskNode::emit_package(QByteArray package)
//Prevent of too short freq.
clock_t curr_ck = clock();
bool keep = false;
if (curr_ck-last_ck <=CLOCKS_PER_SEC/10 && curr_ck-last_ck>=0)
keep = true;
last_ck = curr_ck;
if (m_nBatchTime>0)
{
long long delta = curr_ck-last_ck;
delta *=1000;
delta /= CLOCKS_PER_SEC;
if (delta <=m_nBatchTime && curr_ck-last_ck>=0)
keep = true;
}
m_packBuf.push_back(package);
if (keep==false)
{
flush_from_stdout();
last_ck = curr_ck;
}
}
void taskNode::flush_from_stderr()
......
......@@ -81,6 +81,7 @@ protected:
bool m_bBP_blocked = false;
bool m_bBp_Recovered = false;
int m_nBp_QueueSz = 0;
int m_nBatchTime = 20;
int m_nBp_TimerID = -1;
taskCell * m_pCell = nullptr;
void timerEvent(QTimerEvent *event);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册