1. 程式人生 > >多線程開發+多線程使用共享數據-17

多線程開發+多線程使用共享數據-17

系統調用 包含 avi utf 兩個 任務 對象 管理 創建

進程:運行著的程序

線程:每個進程裏面至少包含一個線程,線程是操作系統創建的,用來控制代碼執行的數據結構,線程就像代碼的執行許可證

單線程程序,主線程的入口就是代碼的開頭

主線程順序往下執行,直到所有的代碼都執行完

CPU核心,在一個時間點上只能執行一個線程代碼

調度:操作系統不會讓一個線程一直占用CPU的

進程裏的多線程:

線程庫:代碼通過系統調用,請求OS分配一個新的線程

python裏面:thread、threading都可以用來創建和管理線程,thread比較底層,threading是thread模塊的擴展,提供了很多線程同步功能,使用起來更加方便強大

多線程的概念

#coding = utf-8

print (‘main thread start.‘)

import threading

from time import sleep

def thread1_entry():

  print (‘child thread 1,strat‘)

  sleep(15)

  print(‘child thread 1,end‘)

t1 = threading.Thread (target=thread1_entry) #實例化

t1.start() 創建新的線程,這時候才有兩個線程;代碼通過系統調用,請求OS分配一個新的線程,與原來的線程並行的執行一段代碼

sleep(10)

print(‘main thread end.‘)

為什麽需要多線程?

多線程給一個程序並行執行代碼的能力

同時處理多個任務

$convert

>>convert 1.avi

>>convert 2.avi

常見的:UI線程、任務線程 task exeute

例子:主線程等待子線程結束

# coding=utf8

import threading

from time import sleep, ctime獲取當前時間
def thread1_entry(nsec):

   print(‘child thread 1, start at:‘, ctime())

   sleep(nsec)

   print(‘child thread 1, end at:‘, ctime())
def thread2_entry(nsec):

   print(‘child thread 2, start at:‘, ctime())

   sleep(nsec)

   print(‘child thread 2, end at:‘, ctime())
if __name__==‘__main__‘:

   print(‘main thread start.‘)

   # 創建線程對象, 指定了新線程的入口函數

   t1 = threading.Thread(target=thread1_entry, args=(1,))

   t2 = threading.Thread(target=thread2_entry, args=(2,))
  # 啟動新線程

  t1.start()

  t2.start()
  # 等t1 線程結束

   t1.join()

  # 等t2 線程結束

   t2.join()

   print(‘main thread end.‘)

多線程開發+多線程使用共享數據-17