sogou / workflow

C++ Parallel Computing and Asynchronous Networking Framework

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

关于WORKFLOW同一个进程内开多个HTTPSERVER的问题

willreno1987 opened this issue · comments

一个进程中,针对不同的端口创建了多个WFHttpServer。比如10000,10002,10004 3个Server。但是10002 HTTPServer的Process的逻辑特别的重,比如要500ms以上的计算。会影响其他Server 的效率么?

由于存在大量的数据共享问题,不方便拆成3个进程。

500ms以上的计算,为什么不封装成一个计算任务?封装成计算任务问题就解决了。

就是如果不封装成一个计算任务,那么就会影响到其他Server就是了。

所有的网络线程,无论client还是server,都只有一组。你占着网络线徎做计算,如果只有你一个人用可以,但多个server的话肯定互相影响啊。用计算任务是一个完美解决方案。

对了!我想过实现一种计算型server,直接切到计算线程执行process。你觉得有必须加上这个功能吗?对实现重计算server是真方便。

就写个demo吧,不写入源代码了:

class CPUHttpServer : public WFHttpServer
{
public:
    CPUHttpServer(http_process_t proc) :
        WFHttpServer([proc](WFHttpTask *task) {
            WFGoTask *t = WFTaskFactory::create_go_task("server", std::move(proc), task);
            series_of(task)->push_back(t);
        })
    { }
    CPUHttpServer(const struct WFServerParams *params, http_process_t proc) :
        WFHttpServer(params, [proc](WFHttpTask *task) {
            WFGoTask *t = WFTaskFactory::create_go_task("server", std::move(proc), task);
            series_of(task)->push_back(t);
        })
    { }
};

用这个CPUHttpServer来创建你那个重计算服务器就可以了。问题解决。

就写个demo吧,不写入源代码了:

class CPUHttpServer : public WFHttpServer
{
public:
    CPUHttpServer(http_process_t proc) :
        WFHttpServer([proc](WFHttpTask *task) {
            WFGoTask *t = WFTaskFactory::create_go_task("server", std::move(proc), task);
            series_of(task)->push_back(t);
        })
    { }
    CPUHttpServer(const struct WFServerParams *params, http_process_t proc) :
        WFHttpServer(params, [proc](WFHttpTask *task) {
            WFGoTask *t = WFTaskFactory::create_go_task("server", std::move(proc), task);
            series_of(task)->push_back(t);
        })
    { }
};

用这个CPUHttpServer来创建你那个重计算服务器就可以了。问题解决。

这个想法很好,对于源代码的改动最小,又解决process计算量大的问题。

就写个demo吧,不写入源代码了:

class CPUHttpServer : public WFHttpServer
{
public:
    CPUHttpServer(http_process_t proc) :
        WFHttpServer([proc](WFHttpTask *task) {
            WFGoTask *t = WFTaskFactory::create_go_task("server", std::move(proc), task);
            series_of(task)->push_back(t);
        })
    { }
    CPUHttpServer(const struct WFServerParams *params, http_process_t proc) :
        WFHttpServer(params, [proc](WFHttpTask *task) {
            WFGoTask *t = WFTaskFactory::create_go_task("server", std::move(proc), task);
            series_of(task)->push_back(t);
        })
    { }
};

用这个CPUHttpServer来创建你那个重计算服务器就可以了。问题解决。

这个想法很好,对于源代码的改动最小,又解决process计算量大的问题。

还有一点 这个结构很通用.