sched_getaffinity和pthread_getaffinity_np的区别

sched_getaffinity和pthread_getaffinity_np都是绑核的函数,网上都说sched_getaffinity是用来绑定进程的,pthread_getaffinity_np是用来绑定线程的。但是我们知道,绑定进程从本质上来讲,也是绑定线程,那这两个有什么区别呢?

可以发现,这两个方法传入的第一个参数是不一样的,sched_getaffinity传入的是进程ID,pthread_getaffinity_np传入的是线程ID。也就是说,一个线程会有两个ID,一个叫进程ID,一个叫线程ID,进程ID在内核中是独立的,由内核维护,线程ID在进程中是独立的,由进程维护。进程ID在不同进程间是有效的,这意味着你可以在进程中修改其他进程的属性,而线程ID无法在不同进程间共享。所以这两个函数最大的区别是,你可以在进程a调用sched_getaffinity修改掉进程b中的某个线程的绑定核。

补充一点,在linux中,线程是在原进程中clone出来的新进程中运行的,和原进程共享内存。所以这也是线程有进程ID的原因。

posted @ 2018-12-28 23:57  酱油党gsh  阅读(3423)  评论(0编辑  收藏  举报