python关于多线程和多进程的选择原则

       python中,由于GIL会导致多线程只是并发,无法真正的并行,因此对于多个没有bug的,并且实际并不需要并发实现的任务来说,在同一时刻始终只有一个cpu在工作,所以多线程并不会节省总体的运行时间,所以python中的多线程实际上是为了实现并发需求,对于提高效率没有多大用处;所以要是需要提高效率,可以用多进程,因为每个进程都有自己独立的全局锁,进程之间不会干扰,所以可以通过多进程来充分利用cpu资源。

       对于线程数量或者进程数量的选择也是需要考虑的,由于当线程数或进程数大于电脑cpu核心时,如果是并发或并行的话,那么cpu会在不同的进程或线程之间快速转换,而转换也是需要消耗cpu资源的,如果cpu资源本身就不多,那么转换可能会很消耗时间,反而造成程序效率下降;一般的,对于IO密集型任务,由于其对cpu资源占用不多,因此转换起来会很快,这时可以多设置些线程或进程,而对于cpu密集型任务,由于每个任务线程或进程对cpu资源占据很大,因此转换起来就会耗费时间,这时最好就不要让线程或进程数多于cpu核心数,避免转换。当然,如果不需要并发或并行,自然就不会存在这个问题了。

       所以总结起来就是两点:

1、关于多进程还是多线程的选择:如果是为了提高效率,则目的就是为了充分利用cpu资源,这时选择多进程,如果只是为了实现并发,效率不重要,而且也不想额外的多消耗cpu资源,则选择多线程;

2、关于线程数和进程数的选择:对于IO密集型任务,可以数量超过cpu核心,对于cpu密集型任务,用多进程处理,并且进程数最好不要超过电脑的cpu核心数。

猜你喜欢

转载自blog.csdn.net/S_o_l_o_n/article/details/86300758
今日推荐