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

一、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
    多进程用于计算密集型,如金融分析
posted @ 2018-10-30 12:10  qi.hu  阅读(141)  评论(0编辑  收藏  举报