在阅读了这篇回答和Robert Love的"Linux内核开发"之后,随后,在clone()系统调用中,我发现Linux中的进程和线程(几乎)与内核无法区分.他们之间有一些调整(在引用的SO问题中被讨论为"更多共享"或"更少共享"),但我仍然有一些问题尚未得到解答.
我最近参与了一个涉及几个POSIX线程的程序,并决定在这个前提下进行实验.在创建两个线程的进程中,所有线程当然都会获得一个返回的唯一值pthread_self(),但不是getpid().
我创建的示例程序如下:
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <unistd.h>
#include <pthread.h>
void* threadMethod(void* arg)
{
int intArg = (int) *((int*) arg);
int32_t pid = getpid();
uint64_t pti = pthread_self();
printf("[Thread %d] getpid() = %d\n", intArg, pid);
printf("[Thread %d] pthread_self() = %lu\n", intArg, pti);
}
int main()
{
pthread_t threads[2];
int thread1 = 1;
if ((pthread_create(&threads[0], NULL, threadMethod, (void*) &thread1))
!= 0)
{
fprintf(stderr, "pthread_create: error\n");
exit(EXIT_FAILURE);
} …Run Code Online (Sandbox Code Playgroud) 我对核心,进程和线程的工作方式有一个误解:
因此,当我在Linux OS上运行一个进程(包含多个线程)并检查“ top -H”命令时,我可以看到线程分布在多个内核上。
那么如何运作?(共享相同进程地址空间的同一进程的线程运行在不同的内核上吗?)?
我在这里想念什么?
谢谢
我在线程与进程调度之间有点混淆.
我已经阅读了有关流程调度策略的内容
http://man7.org/linux/man-pages/man2/sched_getscheduler.2.html
我读过有关线程调度的内容
http://man7.org/linux/man-pages/man3/pthread_getschedparam.3.html
线程是否从其进程继承调度策略?是否可以将进程调度设置为SCHED_OTHER,然后将该进程的一个线程设置为SCHED_FIFO?我独立理解策略但不了解线程/进程关系.有没有洞察力?