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

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

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

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

按以下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

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