apache / brpc

brpc is an Industrial-grade RPC framework using C++ Language, which is often used in high performance system such as Search, Storage, Machine learning, Advertisement, Recommendation etc. "brpc" means "better RPC".
https://brpc.apache.org
Apache License 2.0
16.56k stars 3.98k forks source link

请问一下, brpc和spdk框架一起使用的时候, 二者的线程模型会相互影响么 #2745

Closed gamezhoulei closed 2 months ago

gamezhoulei commented 3 months ago

各位大佬, 请问一下, brpc和spdk框架一起使用的时候, 二者的线程模型会相互影响么

yanglimingcn commented 3 months ago

看你想怎么用了, 1、将brpc的worker线程池和spdk的线程独立开。 2、使用一个队列,形成生产者消费者,把spdk作为一个单线程的消费者。 3、worker线程和spdk是同一个线程,这种情况下需要对brpc做一些改造了。

gamezhoulei commented 2 months ago

看你想怎么用了, 1、将brpc的worker线程池和spdk的线程独立开。 2、使用一个队列,形成生产者消费者,把spdk作为一个单线程的消费者。 3、worker线程和spdk是同一个线程,这种情况下需要对brpc做一些改造了。

独立开来, brpc可以绑定到对应的core么

yanglimingcn commented 2 months ago

可以的,brpc有个函数: // Add a startup function that each pthread worker will run at the beginning // To run code at the end, use butil::thread_atexit() // Returns 0 on success, error code otherwise. extern int bthread_set_worker_startfn(void (*start_fn)());

// Add a startup function with tag extern int bthread_set_tagged_worker_startfn(void (*start_fn)(bthread_tag_t));

可以在这个函数里面完成绑核的工作。

gamezhoulei commented 2 months ago

可以的,brpc有个函数: // Add a startup function that each pthread worker will run at the beginning // To run code at the end, use butil::thread_atexit() // Returns 0 on success, error code otherwise. extern int bthread_set_worker_startfn(void (*start_fn)());

// Add a startup function with tag extern int bthread_set_tagged_worker_startfn(void (*start_fn)(bthread_tag_t));

可以在这个函数里面完成绑核的工作。

好的, 感谢. 只要我spdk和brpc设置不同的core, 就好了.