首页 > 编程语言 >Lniux有关python多线程的历史

Lniux有关python多线程的历史

时间:2023-03-20 19:44:20浏览次数:55  
标签:调用 NPTL python Lniux 调度 线程 内核 多线程

在内核2.6以前的调度实体都是进程,内核并没有真正支持线程。
它是能过一个系统调用clone()来实现的,这个调用创建了一份调用进程的拷贝,跟fork()不同的是,这份进程拷贝完全共享了调用进程的地址空间。
LinuxThread就是通过这个系统调用来提供线程在内核级的支持的(许多以前的线程实现都完全是在用户态,内核根本不知道线程的存在)。
非常不幸的是,这种方法有相当多的地方没有遵循POSIX标准,特别是在信号处理,调度,进程间通信原语等方面。
很显然,为了改进LinuxThread必须得到内核的支持,并且需要重写线程库。
为了实现这个需求,开始有两个相互竞争的项目:IBM启动的NGTP(Next Generation POSIX Threads)项目,以及Redhat公司的NPTL。
在2003年的年中,IBM放弃了NGTP,也就是大约那时,Redhat发布了最初的NPTL。
NPTL最开始在redhat linux 9里发布,现在从RHEL3起内核2.6起都支持NPTL,并且完全成了GNU C库的一部分。
设计NPTL使用了跟LinuxThread相同的办法,在内核里面线程仍然被当作是一个进程,并且仍然使用了clone()系统调用(在NPTL库里调用)。
但是,NPTL需要内核级的特殊支持来实现,比如需要挂起然后再唤醒线程的线程同步原语futex.
NPTL也是一个1*1的线程库,就是说,当你使用pthread_create()调用创建一个线程后,在内核里就相应创建了一个调度实体,在linux里就是一个新进程,这个方法最大可能的简化了线程的实现。
除NPTL的1*1模型外还有一个m*n模型,通常这种模型的用户线程数会比内核的调度实体多。
在这种实现里,线程库本身必须去处理可能存在的调度,这样在线程库内部的上下文切换通常都会相当的快,因为它避免了系统调用转到内核态。
然而这种模型增加了线程实现的复杂性,并可能出现诸如优先级反转的问题,此外,用户态的调度如何跟内核态的调度进行协调也是很难让人满意。

来源:https://bbs.huaweicloud.com/blogs/155779
补充:python是用户级多线程,java是用户级和内核级混合多线程

标签:调用,NPTL,python,Lniux,调度,线程,内核,多线程
From: https://www.cnblogs.com/yooc/p/17237451.html

相关文章

  • 100道python基础题——(10)
    问题:编写一个程序,接受一系列空格分隔的单词作为输入,并在删除所有重复的单词并按字母数字排序后打印这些单词。假设向程序提供以下输入:helloworldandpracticemakespe......
  • 100道python基础题——(11)
    问题:编写一个程序,接受一系列逗号分隔的4位二进制数作为输入,然后检查它们是否可被5整除。可被5整除的数字将以逗号分隔的顺序打印。例:0100,0011,1010,1001那么输出应该是:10......
  • Dockerfile 构建 dotnet + python 镜像
    1编写DockerfileFROMmcr.microsoft.com/dotnet/aspnet:6.0WORKDIR/rootRUNaptupdate\&&aptinstallwgetbuild-essentialzlib1g-devlibncurses5-devli......
  • [oeasy]python0112_扩展ascii_Extended_ascii_法文字符
    法文字符回忆上次内容上次回顾了字型编码的进化过程从7-seg到点阵字库终于让字母、数字、标点明确了字型小写字符占据了位置法文字符没有地方放了7-bit的ascii已......
  • git 集成部署的python代码部分
    importos,requests,hashlib,tarfiledefdepoly(web1_tar_path,web1_deploy_dir,current):tar=tarfile.open(web1_tar_path,mode="r")#解包tar.extractal......
  • 多线程面试——CountDownLatch,CyclicBarrier,Semaphore
    0.总结1.CountDownLatch是1个线程等待其他线程,CyclicBarrier是多个线程相互等待;2.CountDownLatch是计数-1,直到减为0,CyclicBarrier是计数+1,直到达到指定值;3.CountDownLatch......
  • python-运维开发-入门上
    一、Python快速入门上1.1python基础知识01python介绍python是一种面向对象、解释型、多用途设计语言,具有很丰富和强大的库,语法简介,强制用空格作为语法缩进,能够完成快......
  • tensorflow与python版本、cuDNN版本和CUDA版本对应关系
    链接:https://tensorflow.google.cn/install/source_windows?hl=zh-cn#gpu推荐使用tensorflow==2.1.0......
  • python if __name == "__main__"的详解
    前言对于python来说,我们经常会见到一行代码:if__name__=="__main__":balabala那这句话是啥意思呢? 正文首先要明白__name__是python当中的一个属性,代表现在......
  • 【Python工具篇】几款Pycharm插件,提升开发效率
    一、安装方法先来说说插件的安装方法,一点都不难。选择顶部菜单栏的PyCharm选项,打开Preferences,点击plugins,在右侧的文本框中输入想要查看的插件名称,在下方就会罗列......