我得到的核心与我通常得到的核心非常不同 - 大多数线程都在__kernel_vsyscall()中:
9 process 11334 0xffffe410 in __kernel_vsyscall () 8 process 11453 0xffffe410 in __kernel_vsyscall () 7 process 11454 0xffffe410 in __kernel_vsyscall () 6 process 11455 0xffffe410 in __kernel_vsyscall () 5 process 11474 0xffffe410 in __kernel_vsyscall () 4 process 11475 0xffffe410 in __kernel_vsyscall () 3 process 11476 0xffffe410 in __kernel_vsyscall () 2 process 11477 0xffffe410 in __kernel_vsyscall () 1 process 11323 0x08220782 in MyClass::myfunc ()
那是什么意思?
编辑:特别是,我经常在"pthread_cond_wait"和"___newselect_nocancel"中看到很多线程,现在这些线程在每个线程的第二帧 - 为什么这个核心不同?
__kernel_vsyscal
是linux-gate.so(Linux内核的一部分)使用最快可用方法(最好是sysenter
指令)进行系统调用的方法.Johan Petersson正确地解释了这个问题.
当你进行系统调用(比如从文件读取,与硬件通信,写入套接字)时,你实际上是在创建一个中断.然后系统在内核模式下处理中断,并且您的调用将返回结果.大多数情况下,除非你正在进行阻塞调用,否则在syscall中拥有大量线程是很不寻常的,在这种情况下它是预期的.
更具体地说,它意味着线程正在等待内核级系统调用.但是(不幸的是我的观点)已经在名称中:)