• threading多线程模块


    操作系统:(承上启下作用,起到硬件与应用程序之间的连接作用(或者接口作用))


    进程:本质上是一段程序运行的过程,是一个抽象的概念。
    进程的目的就是切换,也就是程序A与程序B矛盾时,可以切换执行,提高CPU的效率。

    进程包括三部分:程序,数据集,程序控制块三个部分。
    程序是一个实体,进程是一个抽象。数据集相当于输入。程序控制块用于切换时,记录上一个进程执行到哪等信息。
    说道切换,可以是一个进程遇到IO操作的时候,执行切换(因为IO时,CPU空闲);也可以根据时间序列切换等等。

    如果只有一个CPU,进程切换只是实现并发(感觉看起来一起执行,比如既可以上网,也可以听歌,实际上不是同时执行),
    并行至少需要多核(多个cpu).这样假如两个CPU同时对应4个任务,这样就既有并行也有并发。


    线程:有了进程后,可以实现一边玩游戏一边听音乐了。假设一个文本程序,当键盘输入的同时,需要屏幕显示,并且同时刻录到磁盘中。
    如果只是用一个进程的话,只能安顺序执行,也就是说键盘输入的同时,屏幕上是看不到的,要等输入完。
    因此需要多进程,但是一个程序就这样分了,搞得跟多个程序似的,并且多进程切换过程会降低效率。

    线程其实可以理解为一个进程中微进程,它共享一个进程中的资源集,线程的切换也比进程的切换省事。比如扣扣,既可以一边聊天,
    又可以一边接收邮箱信息。它们共享一个用户的信息,状态什么的。


    进程与线程区别:
    1.一个程序至少有一个进程,一个进程至少有一个线程。(进程可以理解成线程的容器)

    2.进程在执行过程中拥有独立的内存单元,而多个线程共享(一个进程)内存,从而极大地提高了程序的运行效率

    3.线程是最小的执行单元,进程是最小的资源单位(操作系统分资源最小分发进程)。线程不可能脱离进程独立存在
    等等

    下面看两个简单的多线程例子:
     1 import threading
     2 import time
     3 
     4 def music():
     5     print("begin to listen %s"%time.ctime())
     6     time.sleep(3)
     7     print("stop listening %s" % time.ctime())
     8 
     9 def game():
    10     print("begin to game %s"%time.ctime())
    11     time.sleep(5)
    12     print("stop gaming %s" % time.ctime())
    13 
    14 
    15 if __name__ == '__main__':
    16 
    17     t1 = threading.Thread(target=music)
    18 
    19     t2 = threading.Thread(target=game)
    20 
    21     t1.start()       # 与lesson2放在上面是一样的
    22     t2.start()
    23 
    24     t1.join()        # join这个方法是子线程对象调用的函数,函数的意思是t1这个子线等待结束后,主线程才能走
    25     # t2.join()
    26 
    27     # 与join对应的.setDaemon是守护线程,比如T1设置为守护线程,
    28     # 意思就是t1这个线程跟主线程一起退,主线程结束后,它问一下其他非守护线程,其他的非守护线程也都结束,它结束
    29 
    30     print("ending............")
    View Code
     1 '''
     2 线程,threading可以开线程,里面实例对象有几个重要的方法,比如:.start,.join,.setDaemon
     3 t = threading.Thread()
     4 以上是t的方法(实例化的属性)
     5 另外threading模块还有一些方法:
     6 threading.currentThread()      返回当前的线程变量
     7 threading.enumerate()           返回一个包含正在运行的线程的list.正在运行指线程启动后,结束前。
     8 threading.activeCount()         返回正在运行的线程数量,与len(threading.enumerate())有相同的结果
     9 '''
    10 
    11 import threading  # 线程
    12 import time
    13 
    14 
    15 def Hi(num, i):
    16     print("hello %s" % num)
    17     time.sleep(int(i))
    18 
    19 
    20 if __name__ == '__main__':
    21 
    22     # 主线程下面开了两个子线程
    23 
    24     t1 = threading.Thread(target=Hi, args=(10,2))  # 实例化一个线程对象,开一个子线程1
    25     t1.start()
    26 
    27     t2 = threading.Thread(target=Hi, args=(9,7))  # 实例化一个线程对象,开一个子线程2
    28     t2.start()
    29 
    30     print("ending.................")
    View Code
  • 相关阅读:
    探索c#之Async、Await剖析
    探索C#之布隆过滤器(Bloom filter)
    探索C#之虚拟桶分片
    刷新本地的DNS缓存数据
    php取整函数ceil,floor,round,intval函数的区别
    这样顶级人生规划 ,想不成功都难
    全篇干货,10分钟带你读透《参与感》
    iOS审核秘籍】提审资源检查大法
    php如何遍历多维的stdClass Object 对象,php的转换成数组的函数只能转换外面一丛数组
    RDS MySQL 连接数满情况的处理
  • 原文地址:https://www.cnblogs.com/maxiaonong/p/9500372.html
Copyright © 2020-2023  润新知