zoukankan      html  css  js  c++  java
  • python-多线程

    python-多线程

    1. 什么是线程

    在了解线程前,我们需要首先了解一下进程,并了解其与线程之间的关系。

    1)进程可以看做一个独立的应用,而线程却不可以;

    2)进程有自己独立的内存地址空间(即不共享内存,并互不影响),

         线程只是进程的不同执行路径,线程没有独立的内存地址空间;

    3)一个进程最少包含一个线程,同一个进程下的多个线程共享进程的地址空间,

         一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行;

    4)每个进程都有一个程序运行的入口,顺序执行序列和程序的出口,

         但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制;

    5)进程是资源分配的最小单位,线程是CPU调度的最小单位

         线程就是来工作的,进程是拥有资源者

    6)进程之间的切换比线程之间的切换开销大,使用多线程实现多任务并发执行比使用多进程效率高     

          说明:操作系统在创建进程时,需要为该进程分配独立的内存空间及其他相关资源,而线程的创建相对简单的多

    7)每个线程都有他自己的一组CPU寄存器,称为线程的上下文,该上下文反映了线程上次运行该线程的CPU寄存器的状态。

       指令指针和堆栈指针寄存器是线程上下文中两个最重要的寄存器,线程总是在进程得到上下文中运行的,这些地址都用于标志拥有线程的进程地址空间中的内存。

            线程可以被抢占(中断)。

            在其他线程正在运行时,线程可以暂时搁置(也称为睡眠) -- 这就是线程的退让。

    2. 为什么要使用多线程

    1)使用多线程可以把占据时间长的任务放到后台去处理(比如IO操作,网络数据的收发等),这时我们可以释放一些资源,如内存占用等

    2)使用多线程,程序的运行速度会可能会加快

    3. python实现多线程

    1)自定义线程,继承threading.Thread来实现自定义线程

     1 import threading
     2 import time
     3 
     4 class MyThread(threading.Thread):
     5     
     6 
     7     def __init__(self, num):
     8         super(MyThread, self).__init__()
     9         self.num = num
    10 
    11     def run(self):
    12         print("thread_name: %s, num: %d" % (threading.current_thread().getName(), self.num))
    13         time.sleep(2)
    14         print("num:", self.num)
    15         time.sleep(1)
    16         print("end, ", self.num)
    17 
    18 
    19 if __name__ == '__main__':
    20     thread1 = MyThread(1)
    21     thread2 = MyThread(2)
    22     thread1.start()
    23     thread2.start()

    参考资料:Python多线程 | 菜鸟教程

    参考资料:Python多线程详解

  • 相关阅读:
    程序的机器级表示(一)
    virtual memory(1)
    Python定义参数数量可变的method的问题
    存储器结构层次(四)
    CAShapeLayer
    cell
    远程服务器推送
    keyboad
    search搜索
    Cocoopod
  • 原文地址:https://www.cnblogs.com/marton/p/14403745.html
Copyright © 2011-2022 走看看