同步:就是協同步調,按預定的先後次序進行執行。如:你說完,我再說。
「同」字從字面上容易理解為一起動作
其實不是,」同」字應是指協同、協助、互相配合。
如程序、執行緒同步,可理解為程序或執行緒a和b一塊配合,a執行到一定程度時要依靠b的某個結果,於是停下來,示意b執行;b依言執行,再將結果給a;a再繼續操作
多個執行緒有序執行
from threading import thread,lock
from time import sleep
class
task1
(thread):
defrun
(self):
while
true:
if lock1.acquire():
print("------task 1 -----")
sleep(0.5)
lock2.release()
class
task2
(thread):
defrun
(self):
while
true:
if lock2.acquire():
print("------task 2 -----")
sleep(0.5)
lock3.release()
class
task3
(thread):
defrun
(self):
while
true:
if lock3.acquire():
print("------task 3 -----")
sleep(0.5)
lock1.release()
#使用lock建立出的鎖預設沒有「鎖上」
lock1 = lock()
#建立另外一把鎖,並且「鎖上」
lock2 = lock()
lock2.acquire()
#建立另外一把鎖,並且「鎖上」
lock3 = lock()
lock3.acquire()
t1 = task1()
t2 = task2()
t3 = task3()
t1.start()
t2.start()
t3.start()
執行結果:
這--
----
task1-
----
----
--task2-
----
----
--task3-
----
----
--task1-
----
----
--task2-
----
----
--task3-
----
----
--task1-
----
----
--task2-
----
----
--task3-
----
----
--task1-
----
----
--task2-
----
----
--task3-
----
----
--task1-
----
----
--task2-
----
----
--task3-
----
總結
可以使用互斥鎖完成多個任務,有序的程序工作,這就是執行緒的同步
非同步:
非同步呼叫就是你 喊 你朋友吃飯 ,你朋友說知道了 ,待會忙完去找你 ,你就去做別的了。
from multiprocessing import pool
import time
import os
deftest
(): print("---程序池中的程序---pid=%d,ppid=%d--"%(os.getpid(),os.getppid()))
for i in range(3):
print("----%d---"%i)
time.sleep(1)
return
"hahah"
deftest2
(args):
print("---callback func--pid=%d"%os.getpid())
print("---callback func--args=%s"%args)
pool = pool(3)
time.sleep(5)
print("----主程序-pid=%d----"%os.getpid())
執行結果:
這--
-程序池中的程序--
-pid=9401
,ppid=9400--
----
0---
----
1---
----
2---
---callback
func--
pid=9400--
-callback
func--
args=hahah--
--主程序-
pid=9400--
--
執行緒同步與非同步
多執行緒併發時,多個執行緒同時請求同乙個資源,必然導致此資源的資料不安全,a執行緒修改了b線 程的處理的資料,而b執行緒又修改了a執行緒處理的數理。顯然這是由於全域性資源造成的,有時為了解 決此問題,優先考慮使用區域性變數,退而求其次使用同步 塊,出於這樣的安全考慮就必須犧牲 系統處理效能,加在多執...
同步與非同步(執行緒)
有兩個執行緒在併發執行以下 段,其中 g 是 int 型別的全域性變數。請 問當兩個執行緒都執行完畢該 段後,g 的值的取值範圍為50000 100000。for int i 1 i 50000 i 當多個控制線程共享內容的記憶體時,需要確保每個執行緒看到一致的資料檢視。如果每個執行緒使用的變數都是...
python程序與執行緒,同步與非同步,並行併發
from multiprocessing import process,pool import os import time class myprocess process def init self,wtime process.init self self.wtime wtime defrun s...