Google RPC的线程池实现主要通过c++11标准来实现线程池模型,下面我们将来看看google rpc中对线程池的实现。
首先是定义个一个线程池接口,从代码中,找到了线程池的接口定义,接口的定义如下:
#ifndef GRPCXX_THREAD_POOL_INTERFACE_H
#define GRPCXX_THREAD_POOL_INTERFACE_H
#include <functional>
namespace grpc {
// A thread pool interface for running callbacks.
class ThreadPoolInterface {
public:
virtual ~ThreadPoolInterface() {}
// Schedule the given callback for execution.
virtual void ScheduleCallback(const std::function<void()>& callback) = 0;
};
} // namespace grpc
#endif // GRPCXX_THREAD_POOL_INTERFACE_H
从这份代码声明中,我们可以看到,定义了一个ThreadPoolInterface的虚类,类中定义了一个纯虚函数,ScheduleCallback函数,负责回调函数的调用。接下来,我们将看看这个虚函数的子类,怎么样来实现接口的定义的。对于ThreadPoolInterface的继承,这个类的名字叫做ThreadPool类。这个类的定义在server文件夹下。现在我们来看看这个类的定义吧,ThreadPool类的定义如下:
#ifndef GRPC_INTERNAL_CPP_SERVER_THREAD_POOL_H
#define GRPC_INTERNAL_CPP_SERVER_THREAD_POOL_H
#include <grpc++/co