python多线程效率低,python运行效率很低

  python多线程效率低,python运行效率很低

  http://www.Sina.com/http://www.Sina.com/

  GIL在Python中的角色是什么?

  GIL最初是为数据安全而设计的。出于数据安全的考虑,python在单核CPU上的多线程实际上是并发的,而不是并行的,其中该GIL的每个CPU在同一时间只能运行一个线程。并行是同时处理多路复用请求的概念。但是,并行就不一样了。平行意味着两个或更多的事件同时发生。意味着两个或更多事件在同一时间间隔发生。(python多线程比单线程效率低的原因是:GIL

  获取GIL执行代码,直到sleep或python虚拟机挂起。GILGIL( Global Interpreter Lock)中文为:全局解释器锁

  如你所见,在python中,要运行一个线程,首先需要获得一个名为GIL的锁。此外,python只有一个GIL,当遇到I/O操作时,可以获取并运行CPU来释放锁。如果是纯计算程序,没有I/O操作,解释器会每100次解锁一次,让另一个线程执行(这个数可以在sys.setcheckinterval中调整)。所以CPython的线程库直接封装了OS的本地线程,但是作为一个整体的CPython进程,只有一个获得了GIL的线程同时运行,其他线程都在等待GIL的释放。另一方面,如果每次释放GIL锁时,线程都会发生锁争用并在线程间切换,这会消耗资源。此外,由于GIL锁,python中的一个进程在同一时间只能运行一个线程。所以在多核CPU中,python的多线程效率是在 python多线程下,每个线程的执行方式如下:

  为什么即使在相同的代码中,多线程有时比单线程慢,有时比单线程快?这主要与要执行的代码有关。CPU密集型代码(各种循环处理、计数等。).在这种情况下,由于繁重的计算工作,滴答计数将很快达到100阈值,然后触发GIL的释放和重新竞争(来回于多个线程当然会消耗资源)。因此,python上的多线程在I/o密集型代码中执行I/o操作(文件处理、网络爬虫等。)和多线程高效的单线程,会导致I/o等待,浪费不必要的时间。多线程开启后,线程A在等待时自动切换到线程B,可以提高程序的执行效率,又不浪费CPU资源。IO密集时,可以进行时分交换。在这种情况下,多线程由多线程为什么有时候多线程效率低于单线程?组成。

  每个进程都有自己独立的GIL,可以并行执行,互不干扰。

  在python中,多进程执行效率优于多线程(仅适用于多核CPU)。因此,为了在多核CPU上进行并行处理,提高效率,通常会使用多进程。为什么python的多线程利用不了多核cpu,那为什么比单线程速度要慢?

  #多线程#线程时间上次完成#[timemeasure]执行函数:gene _ 1000 _ fieldtook 3840.604 ms @ time _ measured mult _ thread(roood线程数batch _ size=4cell=4 batch_size)数据生成,线程数: str(batch _ size))threads=[]for iinrange)batch _ size)3360 sscellends=)i1)cell file=t=threading . thread(target=gene _ 1000 _ field _ test,args=(starts,ends file))t=threading . thread)threadfile)(t . start)(threads . append(t)t)# for t in threads:# t . join)execute function 3360g的执行时间与每个线程几乎相同,Purpose @ time _ measuredefmult _ process(rows):# total rows=rows #线程数执行批处理的线程数): str(batch _ size)(process=[]for iinrange)batch _ size)3360 starts=I * cellends=)I1)# p . start)# p

  3359市区市区

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: