JOHNEW
pycircus
采纳率100%
2018-06-11 09:50 浏览 2.1k
已采纳

thrift服务端中可否使用多线程,会出现什么问题

10

thrift服务端可以使用多线程模型,但是由于单个任务很大,时间很长,可以通过在服务端代码中使用多线程来加速处理么?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

4条回答 默认 最新

  • 已采纳
    weixin_38652136 邪恶八进制 2018-06-12 02:10

    是可以使用多线程的,但涉及到多线程之间的任务处理需要谨慎一点

    点赞 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 2018-06-11 15:42

    按以下3个步骤改写服务端(Serv_server.skeleton.cpp)即可实现多线程。

    (1)采用线程池的main函数的代码如下:

    int main(int argc, char **argv) {
    // thread pool
    shared_ptr handler(new ServHandler());
    shared_ptr processor(new ServProcessor(handler));
    shared_ptr protocolFactory(new TBinaryProtocolFactory());
    shared_ptr transportFactory(new TBufferedTransportFactory());
    shared_ptr serverTransport(new TServerSocket(9090));

    // 指定15个线程

    shared_ptr threadManager = ThreadManager::newSimpleThreadManager(15);
    shared_ptr threadFactory
    = shared_ptr(new PosixThreadFactory());

    threadManager->threadFactory(threadFactory);
    threadManager->start();
    printf("start.../n");

    TThreadPoolServer server(processor,
    serverTransport,
    transportFactory,
    protocolFactory,
    threadManager);

    server.serve();

    printf("end/n");
    return 0;
    }

    注意代码中的红色关键字,要将他们修改成你自己的service中定义的名字。

    (2)头文件:

    #include
    #include

    #include
    #include

    能加的都加上吧,以免出现类似如下错误:

    error: ‘ThreadManager’ was not declared in this scope

    (3)命名空间:using namespace ::apache::thrift::concurrency;

    否则出现错误:error: ‘PosixThreadFactory’ was not declared in this scope

    concurrency是和#include中的文件目录是对应的

    每一个客户端连接时,服务端都将启动一个线程为其服务,数据传输结束后,服务端回收这个线程。

    参考:https://blog.csdn.net/hbuxiaoshe/article/details/6560285

    点赞 1 评论 复制链接分享
  • oyljerry oyljerry 2018-06-11 13:26

    可以用多线程,注意线程之间数据同步

    点赞 评论 复制链接分享
  • vampirehua vampirehua 2018-06-12 16:46

    当然可以,但要注意线程的同步异步问题

    点赞 评论 复制链接分享

相关推荐