zoukankan      html  css  js  c++  java
  • 线程理论之大白话

    什么是线程?

      把一个进程比喻为一个车间,那么线程就是车间里面的一条条流水线。一个车间可以有多条流水线,流水线属于车间。一个车间的工作过程是一个进程,一个流水线的工作过程是一个线程。进程是操作系统资源分配的最小单位(生产科3号车间负责生产3万件包装纸箱),线程是cup调度的最小单位(3号车间里面的每一条生产线负责生产纸箱这个具体的任务)。

    多线程的概念?

      就是一个进程中存在多条线程。多线程是数据共享的(共享进程中的空间地址啥的),就是3号车间有多条流水线,都共用了一个车间的资源。

    多线程的应用举例:

      办公三件套之word为例,打开word软件就开启了一个进程,这个进程至少要干几件事儿,1监控键盘输入;2处理文字;3定时自动保存文字信息等,这几件事儿操作的都是同一块数据,所以不能使用多进程(进程间数据隔离啊),只能在一个进程里并发的开启三个县城,如果是单线程,那就只能是键盘输入时,不能处理文字和自动保存,自动保存时又不能打字。

    开启线程的两种方式:
      multiprocess模块完全模仿了threading模块的接口,二者在使用层面,有很大的相似性。

      方式一:

    from threading import Thread
    import time
    
    
    def sayhi(name):
        time.sleep(2)
        print('say hi %s'  % name)
    
    if __name__ == '__main__':
        t = Thread(target=sayhi,args=('cariee',))
        t.start()
        print('主线程')

      方式二:

    from threading import Thread
    import time
    
    
    class Sayhi(Thread):  # 创建了进程Thread
    
        def __init__(self,name):
            super().__init__()  # Thread的__init__方法很重要,通过super()调用
            self.name = name
    
        def run(self):
            time.sleep(2)
            print('%s say hi' % self.name)
    
    if __name__ == '__main__':
        t = Sayhi('cariee')
        t.start()
        print('主线程')

    多线程和多进程的区别:
      1线程的创建开销小于进程创建的开销

      2进程间数据隔离,线程间数据共享

    Thread对象的其他属性和方法:

      .isAlive(): 返回线程是否‘活着’

      .getName():返回线程名

      .setName():设置线程名

    threading模块提供了一些方法:

      threading.currentThread():返回当前的线程变量

      threading.enumerate():返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程

      threading.activeCount():返回正在运行的线程数量,与len(threading.enumerate())有相同的结果

      

  • 相关阅读:
    微软SQL Server 2005的30项顶尖特性
    UML统一建模语言 类关系
    设计模式 建造者模式
    设计模式 原型模式
    设计模式 简单工厂模式
    设计模式 适配器模式
    设计模式 适配器模式
    设计模式 单例模式
    设计模式 抽象工厂模式
    设计模式 桥接模式
  • 原文地址:https://www.cnblogs.com/gzying-01/p/10396047.html
Copyright © 2011-2022 走看看