码迷,mamicode.com
首页 > 编程语言 > 详细

53_并发编程-线程-GIL锁

时间:2018-10-30 13:11:34      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:使用   调用   lap   splay   爬虫   总结   process   col   虚拟   

一、GIL - 全局解释器锁
 
  有了GIL的存在,同一时刻同一进程中只有一个线程被执行;由于线程不能使用cpu多核,可以开多个进程实现线程的并发,因为每个进程都会含有一个线程,每个进程都有自己的GIL锁。
  
  技术分享图片

 

    
 
            ① py文件产生了多个线程,到达解释器
            ② 由于GIL锁问题,所以只能执行一个线程,先调用一个线程,进行编译器编译成 .pyc字节码
            ③ 字节码进入虚拟机形成机器码
            ④ 机器码由cpu执行
 
二、性能测试
 
  多进程和多线程对应I/O 纯计算效率对比
技术分享图片
 1 import time
 2 from multiprocessing import Process
 3 from threading import Thread
 4 
 5 # def func():
 6 #     num = 0
 7 #     for i in range(1,100000000):
 8 #         num += i
 9 
10 def func():
11     time.sleep(2)
12     print(xxxxxxxx)
13 
14 if __name__ == __main__:
15     p_s_t = time.time()
16     p_list = []
17     for i in range(10):
18         p = Process(target=func,)
19         p_list.append(p)
20         p.start()
21     [pp.join() for pp in p_list]
22     p_e_t = time.time()
23     p_dif_t = p_e_t - p_s_t
24 
25     t_s_t = time.time()
26     t_list = []
27     for i in range(10):
28         t = Thread(target=func,)
29         t_list.append(t)
30         t.start()
31     [tt.join() for tt in t_list]
32     t_e_t = time.time()
33     t_dif_t = t_e_t - t_s_t
34 
35     print(多进程执行的时间,p_dif_t)
36     print(多线程执行的时间,t_dif_t)
View Code
 
三、总结
    
  应用:
    多线程用于IO密集型,如socket,爬虫,web
    多进程用于计算密集型,如金融分析

53_并发编程-线程-GIL锁

标签:使用   调用   lap   splay   爬虫   总结   process   col   虚拟   

原文地址:https://www.cnblogs.com/hq82/p/9876087.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!