zoukankan      html  css  js  c++  java
  • 【2020Python修炼记】python并发编程(四)多线程-理论部分

    【目录】

    一、什么是线程

    二、什么是多线程

    三、为何要用多线程

    四、线程 PK 进程

     

    一、什么是线程

    # 在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程

    # 线程,顾名思义,就是一条流水线工作的过程,一条流水线必须属于一个车间,一个车间的工作过程是一个进程。

    车间负责把资源整合到一起,是一个资源单位,而一个车间内至少有一个流水线

    流水线的工作需要电源,电源就相当于cpu

    所以,进程只是用来把资源集中到一起(进程只是一个资源单位,或者说资源集合),而线程才是cpu上的执行单位

    二、什么是多线程

    多线程(即多个控制线程)的概念是,在一个进程中存在多个控制线程,多个控制线程共享该进程的地址空间,

    相当于一个车间内有多条流水线,都共用一个车间的资源。 

    三、为何要用多线程

    多线程指的是,在一个进程中开启多个线程,

    简单的讲:如果多个任务共用一块地址空间,那么必须在一个进程内开启多个线程。详细的讲分为4点:

      1. 多线程共享一个进程的地址空间

          2. 线程比进程更轻量级,线程比进程更容易创建、可撤销,在许多操作系统中,创建一个线程比创建一个进程要快10-100倍,在有大量线程需要动态和快速修改时,这一特性很有用

          3. 若多个线程都是cpu密集型的,那么并不能获得性能上的增强,但是如果存在大量的计算和大量的I/O处理,拥有多个线程允许这些活动彼此重叠运行,从而会加快程序执行的速度。

          4. 在多cpu系统中,为了最大限度的利用多核,可以开启多个线程,比开进程开销要小的多。(这一条并不适用于python)

    # 计算密集型
    from multiprocessing import Process
    from threading import Thread
    import os,time
    
    
    def work():
        res = 0
        for i in range(10000000):
            res *= i
    
    if __name__ == '__main__':
        l = []
        print(os.cpu_count())  # 获取当前计算机CPU个数
        start_time = time.time()
        for i in range(12):
            p = Process(target=work)  # 1.4679949283599854
            t = Thread(target=work)  # 5.698534250259399
            t.start()
            # p.start()
            # l.append(p)
            l.append(t)
        for p in l:
            p.join()
        print(time.time()-start_time)
    计算密集型
    IO密集型

    四、线程 PK 进程——巧借‘工厂流水线’去理解

    1、创建进程的开销要远大于线程

    2、进程之间是竞争关系,线程之间是协作关系 

     

    参考资料:

    https://www.cnblogs.com/linhaifeng/articles/7430082.html

  • 相关阅读:
    CATransition
    OC中只有重写没有重载
    OC内存管理
    NSNotification
    关于一个小应用软件的思考
    tableView主从表在storyboard连线是 Selcetion Segue和Accessory Action的区别
    关于ios8模拟器不能输入中文问题以及软键盘不弹出问题
    UINavigation Bar中使用UIcollectionView,在UIcollectionView的顶端和低端出现空白的问题
    升级到Xcode6.2后 免证书真机调试出错的问题
    让UITableView 的 headerView跟随 cell一起滚动,tableHeaderView
  • 原文地址:https://www.cnblogs.com/bigorangecc/p/12759156.html
Copyright © 2011-2022 走看看