併發編程之多線程

1、線程理論

1. 線程是什麼多線程

  • 每一個進程有一個地址空間,並且默認有一個線程
  • 進程只是用來把資源集中到一塊兒,而線程纔是CPU上的執行單位(進程只是個資源單位)

2. 線程和進程的區別併發

  • 同一個進程內的多個線程共享該進程內的地址資源
  • 建立線程的開銷遠遠要小於建立進程的開銷
  • 建立一個進程,就是建立一個車間,涉及到申請空間,並且在空間內建至少一條流水線就只是在一個車間內造一條流水線,無需申請空間,因此建立開銷小)

3.多線程的舉例ide

2、開啓線程的兩種方式

方式一:函數式開啓線程函數

 1 from threading import Thread
 2 from time import sleep
 3 
 4 
 5 def read(name):
 6     print('%s start read!' % name)
 7     sleep(3)
 8     print('%s stop read!' % name)
 9 
10 
11 if __name__ == '__main__':
12      t = Thread(target=read,args=('sjingx',))
13      t.start()
14      print('主線程')
函數式開啓線程

方式二:類繼承方式開啓線程工具

 1 from threading import Thread
 2 from time import sleep
 3 
 4 
 5 class Read(Thread):
 6     def __init__(self, name):
 7         super().__init__()
 8         self.name = name
 9 
10     def run(self):
11         print('%s start read!' % self.name)
12         sleep(3)
13         print('%s stop read!' % self.name)
14 
15 
16 if __name__ == '__main__':
17     r = Read('sjingx')
18     r.run()
19     print('主線程')
類繼承方式開啓線程

練習題:

1. 基於多線程實現併發的套接字通訊。spa

2. 編寫一個簡單的文本處理工具,具有三個任務,一個接收用戶輸入,一個將用戶輸入的內容格式化成大寫,一個將格式化後的結果存入文件。線程

3、多線程和多進程的區別

1.誰開啓速度快

在主進程下開啓線程code

import time

from multiprocessing import Process
from threading import Thread


# 開啓進程
class Read(Process):

    def __init__(self, name):
        super().__init__()
        self.name = name

    def run(self):
        print('%s start read' % self.name)


if __name__ == '__main__':
    t1 = time.time()
    r = Read('sjingx')
    r.start()
    print('主進程')
    t2 = time.time()
    print(t2-t1)
    
# 結果是:
# 主進程
# 0.024098873138427734
# sjingx start read 

 

在主進程下開啓進程對象

import timefrom threading import Thread

# 開啓線程
class Read(Thread):
    def __init__(self, name):
        super().__init__()
        self.name = name

    def run(self):
        print('%s start read' % self.name)


if __name__ == '__main__':
    t1 = time.time()
    r = Read('sjingx')
    r.start()
    print('主線程')
    t2 = time.time()
    print(t2-t1)

# 運行結果:
# sjingx start read
# 主線程
# 0.001003265380859375

2.多線程和多進程pid的狀況

3.同一進程內的線程共享該進程的數據

 

4、Thread對象的其餘屬性或方法

 

5、守護線程

 

6、GIL全局解釋器鎖

 

7、死鎖現象與遞歸鎖

相關文章
相關標籤/搜索