Я собираюсь написать многопоточную систему обмена сообщениями с общей памятью для доставки сверхбольших объемов сообщений между процессами. Сообщения будут исходить из рабочих потоков веб-сервера. Я хотел бы использовать локальность кеша ЦП, ядра которого находятся на одном и том же ресурсе ЦП. Таким образом, когда я пробуждаю рабочий поток на принимающей стороне этой системы IPC, я пробуждаю поток на том же ЦП.
Мне нужны для Linux (предпочтительно POSIX в целом) и Windows вызовы API и битовая маска, которые мне нужно сделать, чтобы извлечь информацию, которая позволит мне классифицировать идентификатор исполняемого потока - из контекста указанного потока - используя следующую структуру :
struct thread_core_id
{
uint16_t cpu_Id;
uint16_t core_Id;
};
Функции для обеих платформ будут высоко оценены. Я надеюсь, что это можно сделать без системных вызовов, то есть без переключения контекста.
-- редактировать --
В настоящее время я сосредоточен на x86, но другие архитектуры также были бы полезны.