01. 多线程简介及创建多线程的两种方式

1. 线程简介

  1. 线程(Thread)也叫轻量级进程,是操作系统能够进行运算调度的最小单位,它被包涵在进程之中,是进程中的实际运作单位。
  2. 线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。
  3. 一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。

2. 为什么要使用线程

  1. 同一进程中的线程之间共享内存:线程在程序中是独立的、并发的执行流。与分隔的进程相比,进程中线程之间的隔离程度要小,它们共享内存、文件句柄和其他进程应有的状态。
  2. 线程的并发性更高:因为线程的划分尺度小于进程,使得多线程程序的并发性高。进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
  3. 线程比进程的性能更好:这是由于同一个进程中的线程共享同一个进程的虚拟空间。线程共享的环境包括进程代码段、进程的公有数据等,利用这些共享的数据,线程之间很容易实现通信。
  4. 多线程资源消耗更小:操作系统在创建进程时,必须为该进程分配独立的内存空间,并分配大量的相关资源,但创建线程则简单得多。因此,使用多线程来实现并发比使用多进程的性能要高得多。

3. 创建线程的方式

  1. thread模块在python3中更名为_thread.而且将要废弃。
  2. python3中通过threading模块创建多线程,创建方法有两种:
  • 通过实例化threading.Thread对象来创建:threading.Thread(target=xxx, args=(xxx,xxx))
#!/usr/bin/env python
# coding:utf-8

import threading
import time

def run(n):
    print(f'task: {n}')
    time.sleep(1)
    print('2s')
    time.sleep(1)
    print('1s')
    time.sleep(1)
    print('0s')
    time.sleep(1)


if __name__ == '__main__':
    t1 = threading.Thread(target=run, args=('t1',))
    t2 = threading.Thread(target=run, args=('t2',))
    t1.start()
    t2.start()
  • 通过继承threading.Thread类,并重写run方法来创建:MyThread()
#!/usr/bin/env python
# coding:utf-8

import threading
import time
class MyThread(threading.Thread):
    def __init__(self, n):
        super().__init__()
        self.n = n

    def run(self):
        print(f'task: {self.n}')
        time.sleep(1)
        print('2s')
        time.sleep(1)
        print('1s')
        time.sleep(1)
        print('0s')
        time.sleep(1)


if __name__ == '__main__':
    t1 = MyThread('t1')
    t2 = MyThread('t2')
    t1.start()
    t2.start()

你可能感兴趣的:(01. 多线程简介及创建多线程的两种方式)