ivanallen commented on code in PR #2920: URL: https://github.com/apache/brpc/pull/2920#discussion_r2002998483
########## src/brpc/rdma/rdma_endpoint.cpp: ########## @@ -1486,6 +1527,84 @@ void RdmaEndpoint::GlobalRelease() { delete res; } } + + if (FLAGS_rdma_use_polling) { + PollingModeRelease(); + } +} + +std::vector<RdmaEndpoint::Poller> RdmaEndpoint::_pollers; +std::atomic<bool> RdmaEndpoint::_running(false); +std::function<void()> RdmaEndpoint::_callback(nullptr); +butil::Mutex RdmaEndpoint::_cb_mutex; + +void RdmaEndpoint::SetCallbackFn(std::function<void()> cb) { _callback = cb; } + +int RdmaEndpoint::PollingModeInitialize() { + auto fn = [](void* args) -> void* { + auto poller = static_cast<Poller*>(args); + while (_running.load(butil::memory_order_relaxed)) { + std::list<Socket*> sockets; + { + std::unique_lock<butil::Mutex> lk(poller->mutex); + sockets = poller->sockets; // copy all sockets is not good + } + for (auto m : sockets) { + PollCq(m); + } + { + std::unique_lock<butil::Mutex> lk(_cb_mutex); + if (_callback) { + _callback(); Review Comment: 我在想这里如果真的有多个 poller,用户可能会希望不同 core 的 poller 调用不同 core 上用户函数。 这里只设置了个 _callback,还带着锁,多个核之间就变串行了,特别是像 spdk 这样的 rtc 模型,每个核都有个独立的 poller -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: dev-unsubscr...@brpc.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@brpc.apache.org For additional commands, e-mail: dev-h...@brpc.apache.org