![Linux 中线程/进程编程的本机和非本机支持?](https://linux22.com/image/16992/Linux%20%E4%B8%AD%E7%BA%BF%E7%A8%8B%2F%E8%BF%9B%E7%A8%8B%E7%BC%96%E7%A8%8B%E7%9A%84%E6%9C%AC%E6%9C%BA%E5%92%8C%E9%9D%9E%E6%9C%AC%E6%9C%BA%E6%94%AF%E6%8C%81%EF%BC%9F.png)
POSIX 线程(pthread)和 OpenMP 都是线程编程的库。但它们不是 Linux 原生的吗?即它们必须由用户稍后安装?
如果是,Linux 中的本机库或函数是什么?它们用于实现 pthread 和 OpenMP 吗?
为了与进程编程进行并行比较,如果我是正确的,Linux 本身就提供了 fork()、exec*()、waitpid() 和 pipeline() 函数,而 MPI 则不然。 MPI 是否在那些用于流程编程的本机函数中实现?
答案1
你所说的“非本地人”是什么意思? “默认安装”没有明确的定义,因为每个发行版都有自己的默认安装包集,并且很容易调整该集。
POSIX 线程是 GNU libc 的一部分,它是任何非嵌入式 Linux 系统的基本部分(有小型系统的替代品,我认为主要的系统还包括 pthread 支持)。 Linux 内核本身就包含对线程的支持。它不完全是pthread,但是内核单独支持的内容和内核之上的标准库支持的内容之间的区别很少有用。
开放的MP来自 GOMP,它是 gcc 的一部分。与标准库 (Glibc) 不同,正常的 Linux 系统无需安装 libgomp 也是可能的。
有几种实现方式MPI对于 Linux,包括MPICH和开放MPI。普通的 Linux 系统也没有这些。
一切最终都是在之上实现的系统调用,即内核提供的功能。 MP、MPI 和其他库是根据进程管理、进程间通信(管道、套接字、共享内存等)和多线程(锁、条件等)的系统调用来实现的。