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

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

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