c++ - seastar 如何在不同的 cpu 上调用代码?
问题描述
我目前正在使用 seastart 框架,发现它声称 seastart 可以将任务提交到不同的 cpu。
Seastar 声称它在不同的 coers 之间没有任何共享。
所以我认为seastar将不同的网络线程绑定到不同的cpu,并将不同的任务提交给不同的后台线程(称为引擎、容器或其他东西)。
seastar 如何实现这一点,使用pthread_setaffinity_np
?
但是在提交任务之前,代码仍然在随机线程上工作吗?只是通过smp::submit_to
显式编码将网络套接字或存储等关键资源分配到不同的 cpu?
解决方案
直到现在我才听说过 Seastar,而且这张照片看起来非常低效。正如基准所证实的那样。每个线程有一个堆栈会更有效,因为堆栈的顶部总是“热”的(缓存在 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++ - <% %> 在 C++ 中做了什么?
- c# - Core 3.0 MVC 区域路由在 RedirectToAction 中不起作用
- php - http_build_query 使用 utf-8 编码
- c++ - using GnuWin32 make getting error : make: *** No rule to make target `g++.exe', needed by `server.o'. Stop
- drupal-7 - Drupal 7 - 重命名内容中的图像不会在页面上更新,但仍然显示图像
- flutter - App crashes with firebase_analytics in Flutter
- javascript - How to avoid saving a new document to my mongoDB database after registering a new user?
- php - PHP array add an extra same-array
- c - 在“for”中忽略“if”条件
- django - Django modal Submit form with foreign key not working