我目前正在使用 seastart 框架,
并发现它声称 seastart 可以将任务提交到不同的 cpu。
Seastar 声称它在不同的 coers 之间没有任何共享。
所以我认为seastar将不同的线程绑定(bind)到不同的cpu,
并将不同的任务提交到不同的后台线程(称为引擎、容器或其他东西)。
seastar 如何实现这一点,使用 pthread_setaffinity_np
?
但是在提交任务之前,代码仍然在随机线程上工作吗?通过使用 smp::submit_to
编码将网络套接字或存储等关键资源分配到不同的 cpu明确地?
最佳答案
直到现在我才听说过 Seastar,而且这张照片看起来非常低效。正如 benchmarks 所证实的那样.每个线程有一个堆栈会更有效,因为堆栈的顶部总是“热”的(缓存在 L1 中)。
无论如何,是的,要将线程固定到核心,您可以使用特定于平台的 API。如果是 POSIX,则为 pthread_setaffinity_np
:
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(core, &cpuset); // core number starts from 0
int rc = pthread_setaffinity_np(myThread.native_handle(), (cpu_set_t), &cpuset);
或
SetThreadAffinityMask
在 Windows 上:DWORD_PTR mask = (DWORD_PTR) (1 << core); // core number starts from 0
auto rc = SetThreadAffinityMask(GetCurrentThread(), mask);
关于c++ - seastar 如何在不同的 cpu 上调用代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59659862/