内存优化

This commit is contained in:
aozhiwei 2019-05-28 19:07:47 +08:00
parent 780734e980
commit 0d1fd33446
4 changed files with 61 additions and 2 deletions

View File

@ -62,6 +62,39 @@ namespace f8
work_thread_ = new std::thread(&HttpThread::WorkThreadProc, this); work_thread_ = new std::thread(&HttpThread::WorkThreadProc, this);
} }
void UnInit()
{
terminated = true;
loop_cond_->notify_all();
work_thread_->join();
delete work_thread_;
work_thread_ = nullptr;
loop_mutex_->lock();
if (!work_node_) {
work_node_ = top_node_;
top_node_ = nullptr;
bot_node_ = nullptr;
}
while (work_node_) {
AsyncHttpNode* pdelnode = work_node_;
work_node_ = work_node_->nextnode;
if (!work_node_) {
work_node_ = top_node_;
top_node_ = nullptr;
bot_node_ = nullptr;
}
delete pdelnode;
}
loop_mutex_->unlock();
delete loop_cond_;
loop_cond_ = nullptr;
delete loop_mutex_;
loop_mutex_ = nullptr;
delete msg_mutex_;
msg_mutex_ = nullptr;
}
void AddAsyncHttp(AsyncHttpNode* p) void AddAsyncHttp(AsyncHttpNode* p)
{ {
std::unique_lock<std::mutex> lk(*loop_mutex_); std::unique_lock<std::mutex> lk(*loop_mutex_);
@ -81,7 +114,7 @@ namespace f8
void WorkThreadProc() void WorkThreadProc()
{ {
while (true) { while (!terminated) {
ProcessMsg(); ProcessMsg();
WaitLoopCond(); WaitLoopCond();
} }
@ -189,6 +222,7 @@ namespace f8
int exec_async_http_msgid = 0; int exec_async_http_msgid = 0;
private: private:
volatile bool terminated = false;
std::mutex *loop_mutex_ = nullptr; std::mutex *loop_mutex_ = nullptr;
std::condition_variable *loop_cond_ = nullptr; std::condition_variable *loop_cond_ = nullptr;
@ -209,6 +243,16 @@ namespace f8
exec_async_http_msgid = MsgQueue::Instance()->AllocIMMsgId(); exec_async_http_msgid = MsgQueue::Instance()->AllocIMMsgId();
} }
void UnInit()
{
for (auto& itr : http_thread_pool) {
HttpThread* thread = itr;
thread->UnInit();
delete thread;
}
http_thread_pool.clear();
}
void SetThreadNum(int thread_num) void SetThreadNum(int thread_num)
{ {
assert(thread_num > 0); assert(thread_num > 0);
@ -334,6 +378,7 @@ namespace f8
void HttpClientPool::UnInit() void HttpClientPool::UnInit()
{ {
impl_->UnInit();
delete impl_; delete impl_;
impl_ = nullptr; impl_ = nullptr;
} }

View File

@ -22,6 +22,16 @@ namespace f8
struct NetMsgHandlerObject struct NetMsgHandlerObject
{ {
NetMsgHandler* handlers[MAX_MSG_ID] = { nullptr }; NetMsgHandler* handlers[MAX_MSG_ID] = { nullptr };
~NetMsgHandlerObject()
{
for (size_t i = 0; i < MAX_MSG_ID; ++i) {
if (handlers[i]) {
delete handlers[i];
handlers[i] = nullptr;
}
}
}
}; };
template<typename InstanceType, typename MsgType> template<typename InstanceType, typename MsgType>

View File

@ -27,7 +27,7 @@ namespace f8
bool is_poly_log = false; bool is_poly_log = false;
std::thread* save_thread = nullptr; std::thread* save_thread = nullptr;
bool save_thread_shutdown = false; volatile bool save_thread_shutdown = false;
std::mutex msg_mutex; std::mutex msg_mutex;
TGLogMsgNode* top_node = nullptr; TGLogMsgNode* top_node = nullptr;
@ -44,6 +44,9 @@ namespace f8
virtual ~TGLogImpl() virtual ~TGLogImpl()
{ {
save_thread_shutdown = true;
save_thread->join();
delete save_thread;
delete save_cond_mutex; delete save_cond_mutex;
save_cond_mutex = nullptr; save_cond_mutex = nullptr;
delete save_cond; delete save_cond;

View File

@ -209,6 +209,7 @@ namespace f8
google::protobuf::Message* msg = prototype->New(); google::protobuf::Message* msg = prototype->New();
JsonToMessage(*p, msg); JsonToMessage(*p, msg);
push_back_func(msg); push_back_func(msg);
delete msg;
} }
return true; return true;
} }