我有一个类似于tcpdump的ac程序,它使用POSIX aio从NIC捕获数据包并将其写入文件,并且在执行过程中被OS划分为多个线程,但是所有线程都在同一内核上,导致内核使用率上升高达100%,导致数据包丢失。
为了减少核心负载和防止数据包丢失,我一直在决定将某些线程绑定到另一个核心。当我使用htop linux实用工具显示线程pid时,它们是不同的,但是我希望能够在程序中识别OS创建的线程,以及哪个线程是哪个PID可以关联其中的一些线程。
注意: :我在pid for new thread上找到了一些信息,但这没有帮助。
我完成了!!!我在下面进行了跟踪,以能够识别操作系统自动创建的程序线程并将它们中的某些线程与特定内核关联。
首先,我从/ proc /(程序PID)/任务路径的子目录中提取了所有程序线程ID(TID)。
第二步,我使用sched_setaffinity()函数将特定线程绑定到另一个内核。
答案 0 :(得分:0)
使用pid_t gettid(void);
或pthread_t pthread_self(void)
怎么样?
结帐https://www.systutorials.com/docs/linux/man/2-gettid/
#include <sys/types.h>
pid_t gettid(void);
或使用pthread: how to get thread id of a pthread in linux c program?