太原网站建设注意,做网站需要资质吗,wordpress responsive theme,html5手机微网站模板了解过python 编程语言的人#xff0c;可能很多人都听过#xff0c;python的多线程是假的。
之所以这么说的原因是因为#xff0c;大家应该都知道python 是一门解释型语言#xff0c;在cpython解释器中有一个GIL(Global Interpreter Lock)#xff0c;全局解释锁#xff…了解过python 编程语言的人可能很多人都听过python的多线程是假的。
之所以这么说的原因是因为大家应该都知道python 是一门解释型语言在cpython解释器中有一个GIL(Global Interpreter Lock)全局解释锁它是一把全局锁作用在python解释器上。
它的作用就是让CPU同时只能执行一个python线程也就是说python并发编程失去了意义。
而之所以有GIL的存在是因为python语言使用了大量的c语言库GIL是为了解决引入C语言库的并发问题并且因为使用的是单锁因此也排除了死锁的问题。
cpython使用的是引用计数的方式解决垃圾回收的问题因此为了防止其它线程更改计数参数因此才有了GIL如果使用的是其它的垃圾回收方式那么就不会有GIL的问题。
怎么解决python的GIL功能呢
GIL功能并不是完全一无是处它在CPU密集型的任务中因为单线程问题会导致python并发失去意义但在IO密集型的任务中因为不需要使用CPU的多核优势因此多线程依然有其作用。
原因是因为IO任务python线程进入等待python解释器会释放GIL。 如果在CPU密集型的任务中可以使用python多进程实现并发任务原因就是python每个进程都会有一个自己的解释器这时不同的解释器之间无法干涉因此多进程就实现多线程的效果但由于创建进程会比创建线程消耗更多的资源因此多进程会对服务器造成更大的压力。 还有一个办法就是使用Python协程其也可以解决并发问题。