zoukankan      html  css  js  c++  java
  • threading多线程

    什么是线程?

    线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。一个进程中可以包含多个线程。

     1 import threading
     2 import time
     3 begin = time.time()
     4 def f1(a,b):
     5     print("f1",a,b)
     6     time.sleep(2)
     7 def f2(a,b,c):
     8     print("f2",a,b,c)
     9     time.sleep(3)
    10 t1 = threading.Thread(target=f1,args=(1,1))
    11 t2 = threading.Thread(target=f2,args=(2,2,2))
    12 t1.start()
    13 t2.start()
    14 end = time.time()
    15 print(end-begin)

    用过上述的代码实现了三条(加上主线程)线程的“并行”。

    线程的创建

      t1 = threading.Thread(target=f1,args=(1,1)) 其中target是目标函数,无括号。args传入变量。

      t1.start()表示激活这个线程。

    .join 和 setdeamon

      t1.join必须在start之后加入,表示主线程必须等待该子线程运行完之后再结束。

      t1.setDaemon(True) 必须在start之前加入。表示主线程不在等待此子线程而结束。但是必须等待其他子线程结束。

    其他内容

      线程之间数据相互影响,但是进程之间完全独立。

      由于cpython解释器存在的global interpreter lock使得每个进程一次只能解释一个线程。所以Python没有实现真正意义上的并行(多核处理同时多个线程)。

      线程分为IO密集型和计算密集型。由于GIL的存在Python在处理多个计算密集型线程时比不用多线程用时更长。(抢夺CPU资源)在3.5优化后好很多。

      解决办法:1.多个进程(会复制一个主进程内存爆炸)2.协程等。3.其他语言。

  • 相关阅读:
    使用BigQuery分析GitHub上的C#代码
    ASP.NET Core 处理 404 Not Found
    C# 7 局部函数剖析
    调试 ASP.NET Core 2.0 源代码
    Entity Framework Core Like 查询揭秘
    ASP.NET Core Razor 视图组件
    Thread 1 cannot allocate new log引起的宕机事故(转载)
    docker默认网段和主机网段冲突解决
    docker安装异常以及网络问题总结
    max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
  • 原文地址:https://www.cnblogs.com/khal-Cgg/p/5920184.html
Copyright © 2011-2022 走看看