From 38ab3e0df42db39a673134cc6159e4a815b27431 Mon Sep 17 00:00:00 2001 From: xiongziliang <771730766@qq.com> Date: Sat, 22 Apr 2023 22:10:35 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0cpu=E4=BA=B2=E5=92=8C?= =?UTF-8?q?=E6=80=A7=E8=AE=BE=E7=BD=AE=E5=8F=82=E6=95=B0:=20#2407?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 如果需要调用getSnap和addFFmpegSource接口,可以关闭cpu亲和性以发挥ffmpeg多核性能 --- server/main.cpp | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/server/main.cpp b/server/main.cpp index 92cbd8c6..58b6043a 100644 --- a/server/main.cpp +++ b/server/main.cpp @@ -160,6 +160,14 @@ public: "启动事件触发线程数",/*该选项说明文字*/ nullptr); + (*_parser) << Option(0,/*该选项简称,如果是\x00则说明无简称*/ + "affinity",/*该选项全称,每个选项必须有全称;不得为null或空字符串*/ + Option::ArgRequired,/*该选项后面必须跟值*/ + to_string(1).data(),/*该选项默认值*/ + false,/*该选项是否必须赋值,如果没有默认值且为ArgRequired时用户必须提供该参数否则将抛异常*/ + "是否启动cpu亲和性设置",/*该选项说明文字*/ + nullptr); + #if defined(ENABLE_VERSION) (*_parser) << Option('v', "version", Option::ArgNone, nullptr, false, "显示版本号", [](const std::shared_ptr &stream, const string &arg) -> bool { @@ -200,15 +208,16 @@ int start_main(int argc,char *argv[]) { g_ini_file = cmd_main["config"]; string ssl_file = cmd_main["ssl"]; int threads = cmd_main["threads"]; + bool affinity = cmd_main["affinity"]; //设置日志 Logger::Instance().add(std::make_shared("ConsoleChannel", logLevel)); -#ifndef ANDROID +#if defined(ANDROID) auto fileChannel = std::make_shared("FileChannel", exeDir() + "log/", logLevel); - //日志最多保存天数 + // 日志最多保存天数 fileChannel->setMaxDay(cmd_main["max_day"]); Logger::Instance().add(fileChannel); -#endif// +#endif // !defined(ANDROID) #if !defined(_WIN32) pid_t pid = getpid(); @@ -252,8 +261,11 @@ int start_main(int argc,char *argv[]) { uint16_t httpsPort = mINI::Instance()[Http::kSSLPort]; uint16_t rtpPort = mINI::Instance()[RtpProxy::kPort]; - //设置poller线程数,该函数必须在使用ZLToolKit网络相关对象之前调用才能生效 + //设置poller线程数和cpu亲和性,该函数必须在使用ZLToolKit网络相关对象之前调用才能生效 + //如果需要调用getSnap和addFFmpegSource接口,可以关闭cpu亲和性 + EventPollerPool::setPoolSize(threads); + EventPollerPool::enableCpuAffinity(affinity); //简单的telnet服务器,可用于服务器调试,但是不能使用23端口,否则telnet上了莫名其妙的现象 //测试方法:telnet 127.0.0.1 9000