zoukankan      html  css  js  c++  java
  • 并发跟并行

    一、并发和并行

    多任务的概念:

    1.简单地说,就是操作系统可以同时运行多个任务。

    并发:指的是任务数多余cpu核数,通过操作系统的各种任务调度算法,实现多个任务
    "一起"执行(实际上总有一个任务不在执行,因为切换任务的速度相当快,看上去一起执行而已)

    例子: 就相当于好几个同学,同时提问一个老师,老师只能一个个回答。


    并行:指的是任务数小于等于cpu核数,即任务真的一起执行的

    例子: 就相当于好几个同学,同时提问。多个老师同时给每个同学解答

    总结:真正的并行执行多任务只能在多核cpu上实现,但是由于任务数量远远多于cpu的核心
    数量,所以操作系统也会自动把很多任务轮流调度到每个核心上执行

    2.同步异步

    同步:是指线程在访问某一资源时,获得了资源的返回结果之后才会执行其他操作(先做
    某些事,再做某些事)
    异步:与同步相对,是指线程再访问某一资源时,无论是否取得返回结果,都进行下一步操作;当有了资源返回结果时
    系统会通知线程。

    二、线程

    1、threading模块介绍
    python的Thread模块是比较底层的模块,Python的threading模块是对Thread做了一些包装的
    可以更加方便的被使用

    创建线程对象:threading.Thread(target=func)
    参数target指定线程执行的任务(函数)

    Thread类提供了一下方法:

    方法: 说明
    run() 用以表示线程活动的方法
    start() 启动线程活动
    join() 设置主线程会等待time秒后再往下执行,time默认为子线程结束,多个子线程
    之间设置的值会叠加
    isAlive() 返回线程是否活动的
    getName() 返回线程名
    threading.currentThread():返回当前执行的线程
    threading.enumerate():返回正在运行的所有线程(list)。正在运行指线程启动后,结束前,不包括启动
    前和终止后的线程
    threading.activeCount():返回正在运行的线程数量

    例子一:
    import threading

    # 创建线程
    def func1(name):
      print("线程一{}".format(name))

    def func2():
      print("线程二")

    # 创建两个线程
    """
    target 传入的函数名, args 函数的参数,是个元祖
    """
    t1 = threading.Thread(target=func1, args=("猫咪",))
    t2 = threading.Thread(target=func2)

    # 启动线程1
    t1.start()
    print(threading.current_thread())
    t1.join()

    # 启动线程2
    t2.start()
    print(threading.current_thread(),threading.enumerate(),threading.active_count())
    t2.join()


    例子二:
    # 创建线程的第二种写法
    import requests
    class ThreadRequest(threading.Thread):
    # 如果写初始化函数一定要调用父类的__init__函数
    def __init__(self, url):
      self.url = url
      super().__init__()

    # 重写Thread类里面的run方法
    def run(self):
      res = requests.get(self.url)
      print("返回状态码{}".format(res.status_code))

    url = "https://123.sogou.com/"

    # 创建五个线程
    for i in range(5):
      t = ThreadRequest(url)
      t.start()
      t.join()

  • 相关阅读:
    excel导出的时候从程序后台写到excel里的是文本,所以无法在excel中计算怎么办?
    深度经验总结:快逸报表工具单数据集版本和多数据集版本的主要区别之一
    如何循序渐进有效学习 JavaScript?
    MariaDB和mySQL到底区别在哪,实验说明问题!
    实现点击页面报表头某个字段进行该字段的重新排序: 经过验证,此代码是工作的
    Oracle TDE的学习
    LOB类型的学习、总结
    使用GC 初始化DG(将备份集复制到目标端再初始化)
    oradebug 的学习 一
    角色 RESOURCE、CONNECT、DBA具有的权限
  • 原文地址:https://www.cnblogs.com/666666pingzi/p/10964555.html
Copyright © 2011-2022 走看看