zoukankan      html  css  js  c++  java
  • 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
        多进程用于计算密集型,如金融分析
  • 相关阅读:
    memcached整理の基本使用
    memcached整理の编译
    linux命令の删除文件和文件夹 复制粘贴文件和文件夹
    ANSIBLE工具
    RSYNC服务
    FTP服务
    Mac运维安装软件
    WebSocket协议
    TCP三次握手和四次挥手、HTTP协议
    GITBOOK/HEXO TRAVIS GITHUB-PAGES 博客搭建
  • 原文地址:https://www.cnblogs.com/hq82/p/9876087.html
Copyright © 2011-2022 走看看