首页 > 编程知识 正文

python程序的效率比c程序的效率低,多线程比单线程慢

时间:2023-05-05 04:30:29 阅读:162514 作者:2572

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

GIL在Python中的作用是什么

最初设计GIL是为了数据安全。 为了数据安全,python在这个GIL的每个CPU只能同时运行一个线程的单核CPU上的多线程实际上是并发的,不是并行的。 同时并行是从宏观上同时处理复用请求的概念。 但并行又有区别,并行是指两个或多个事件发生在同一时间; 同时意味着两个或多个事件以相同的时间间隔发生。 (python多线程比单线程效率低的原因是:GIL

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

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

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

各进程都有各自独立的GIL,通过不相互干扰,可以真正并行执行。

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

#多线程#上次完成的线程时间#[timemeasure] execute function : gene _ 1000 _ field took 3840.604 ms @ time _ measuredefmult _ thread (ro ood线程数batch _ size=4cell=4 batch_size (处理数据生成print ) )数据生成中,线程数:'str(batch_size ) ) threads=[]forIinrange ) batch_size ) 3360 SSSS cellends=) I1 ) cell file=t=threading.thread (target=gene _ 1000 _ field _ test,args=(starts,ends, file ) ) t=threading.thread ) thread file ) (t.start ) (threads.append(t ) t ) # for t in threads: # t.join ) executefunction3360g执行时间与各个线程的执行时间几乎相同,目的@ time _ measuredefmult _ process (rows ) : #总行数rows=rows #线程数batch 要实现batch )的线程的数目:'str(batch_size ) (process=[]forIinrange ) batch_size ) 3360starts=I*cellends=) I1 ) ) # p.start ) ) # p_lst.append(p ) p ) t=threading.thread ) target file ) ) p=process (target=gene _ 1000

3359 www.cn blogs.com/caopeiyang/p/9418897.html https://www.cn blogs.com/nick Chen 121/p/1130256.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。