线程理论之大白话

什么是线程?

  把一个进程比喻为一个车间,那么线程就是车间里面的一条条流水线。一个车间可以有多条流水线,流水线属于车间。一个车间的工作过程是一个进程,一个流水线的工作过程是一个线程。进程是操作系统资源分配的最小单位(生产科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())有相同的结果

  

原文地址:https://www.cnblogs.com/gzying-01/p/10396047.html