我在linux系统中开发了一个带有12个posix线程的C应用程序。它是一个多核系统。 阅读后我发现内核只知道我的进程而且它不会意识到线程(posix库会照顾)。 在这种情况下,我的12个线程是否只使用一个核心,在该核心中进程被调用,或者我的线程可以在所有可用的核心中运行? Posix库是否可以将线程安排到其他内核?
答案 0 :(得分:1)
从历史上看,已经有相当多的库实现了类似POSIX线程的功能。 LinuxThreads带有glibc,但由于早期内核(例如特定于线程的当前目录和umask)的限制而出现了严重的一致性问题。它实际上可以同时在不同CPU上的同一进程中运行多个线程(当时人们没有谈到核心)。 FSU线程具有更好的POSIX一致性(即使在PI调度方面,如果我没记错),但每个进程限制为一个CPU。许多线程库还尝试了n:m方案,其中在少量内核调度线程上执行了大量用户空间线程(可以在不同的CPU上并行运行)。
对于Linux和C / C ++,当NPTL被添加到glibc并且越来越紧密地与库的其余部分集成时,这几乎停止了。 NPTL具有1:1模型:每个用户空间线程对内核可见,并且可以并行运行,因为有足够长的硬件资源可供使用。