Thrift 的五种工做模式

1、thrift 共有5中工做模式,分红阻塞和非阻塞:apache

阻塞:TSimpleServer、TThreadPoolServer多线程

非阻塞:TNonblockingServer、THsHaServer、TThreadedSelectorServer并发

这里的阻塞是指,若是同时有多个新连接到来,但一次只能处理一个新链接,即当前的连接会阻塞后续连接的处理。函数

非阻塞则是,当有许多新链接到来时,会同时得到这些连接的列表,一次性处理一批连接。高并发

两者的区别在加上线程池的时候就显现出来了,阻塞模式一次只能往池子里扔一个连接,而非阻塞一次能够扔一堆连接。this

但池子自己大小是优先的,因此通常高并发场景并不适合用线程池模式。spa

 

具体的工做模式参考:https://blog.csdn.net/houjixin/article/details/42779915.net

 

2、线程池模式代码:线程

做为服务端,应该可以同时接收多个客户端传来的数据,因此服务端应该实现多线程机制。server

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

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

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

// 指定15个线程

  shared_ptr<ThreadManager> threadManager = ThreadManager::newSimpleThreadManager(15);
  shared_ptr<PosixThreadFactory> threadFactory
  = shared_ptr<PosixThreadFactory>(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 <concurrency/ThreadManager.h>
#include <concurrency/PosixThreadFactory.h>

#include <server/TThreadPoolServer.h>
#include <server/TThreadedServer.h>

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

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

相关文章
相关标签/搜索