美文网首页
2020-02-07论python的GIL

2020-02-07论python的GIL

作者: 七天七念 | 来源:发表于2020-02-07 13:25 被阅读0次

    python是个有趣的编程语言,GIL也是python绕不过去的一个点。
    随着深入学习的见识,越来越发现GIL已经深入到了python的本质上,这也是python3里面也不能除掉gil的原因。
    gil:一种python的同时只能运行一个线程的保护机制,太多太多的库为了简单而使用了这个机制来保证数据的唯一性。
    特点:当遇到python代码运行的时候,python线程运行会自动保持只有一个线程再运行,当遇到非python运行的时候,
    自动停止这种机制。

    深入思考超越gil的解决办法之后,我发现应当有3种办法能解决这种问题吧。
    第一种,最传统的方式是利用异步+多进程的方式来解决,这是python最流行的主流方式。

    那么缺点是什么?资源的消耗太大,变量的不稳定性,表述为多进程变量的共享在长期运行的情况下的不稳定

    第二种,非主流的,经过深入思考研究之后感觉可行的方案,python转C 转python再运行,也即是cython。
    结合python的多线程进行运行,python的多线程是真多线程,这是需要明白的一点。

    那么缺点是什么?变量的不可控性,表述为python本身的变量跟转译之后的变量不能操作

    第三种,这是离python本身最遥远的解决办法,python版本的再编译,python本身是在多线程的底层代码上嵌入了
    gil,那么只要取消这一层底层代码就可以解决这个问题了。
    但是python3光编译代码 就几十万行了。。。
    那么缺点是什么?这也是难度最大最不可行的方案,问题并不是python这本身程序的问题,而是太多太多的库依赖于gil了,而
    python的库本身就有很多是依靠靠爱发电的模式进行开发的,这才是python3也没有办法超脱gil的本质原因。

    相关文章

      网友评论

          本文标题:2020-02-07论python的GIL

          本文链接:https://www.haomeiwen.com/subject/efymxhtx.html