線程理論之大白話

什麼是線程?多線程

  把一個進程比喻爲一個車間,那麼線程就是車間裏面的一條條流水線。一個車間能夠有多條流水線,流水線屬於車間。一個車間的工做過程是一個進程,一個流水線的工做過程是一個線程。進程是操做系統資源分配的最小單位(生產科3號車間負責生產3萬件包裝紙箱),線程是cup調度的最小單位(3號車間裏面的每一條生產線負責生產紙箱這個具體的任務)。併發

多線程的概念?spa

  就是一個進程中存在多條線程。多線程是數據共享的(共享進程中的空間地址啥的),就是3號車間有多條流水線,都共用了一個車間的資源。操作系統

多線程的應用舉例:線程

  辦公三件套之word爲例,打開word軟件就開啓了一個進程,這個進程至少要幹幾件事兒,1監控鍵盤輸入;2處理文字;3定時自動保存文字信息等,這幾件事兒操做的都是同一塊數據,因此不能使用多進程(進程間數據隔離啊),只能在一個進程裏併發的開啓三個縣城,若是是單線程,那就只能是鍵盤輸入時,不能處理文字和自動保存,自動保存時又不能打字。code

開啓線程的兩種方式:
  multiprocess模塊徹底模仿了threading模塊的接口,兩者在使用層面,有很大的類似性。對象

  方式一:blog

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())有相同的結果

相關文章
相關標籤/搜索