成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

線程同步python的完成及線程同步有序化

89542767 / 363人閱讀

  本文主要是闡述了線程同步python的完成及線程同步有序化,線程同步多用于與此同時(shí)啟用好幾個(gè)函數(shù)公式,cpu時(shí)間片輪著分給好幾個(gè)每日任務(wù)


  序言


  線程同步多用于與此同時(shí)啟用好幾個(gè)函數(shù)公式,cpu時(shí)間片輪著分給好幾個(gè)每日任務(wù)。特點(diǎn)是提升cpu的利用率,使電子計(jì)算機(jī)降低解決好幾個(gè)任務(wù)總時(shí)長;主要缺點(diǎn)若是有靜態(tài)變量,啟用好幾個(gè)函數(shù)公式會(huì)讓靜態(tài)變量被好幾個(gè)函數(shù)公式改動(dòng),導(dǎo)致計(jì)算誤差,這使得必須使用join方法或是設(shè)定靜態(tài)變量去解決問題。python使用threading模塊來達(dá)到線程同步,threading.join()方法是什么確保調(diào)用join的子線程結(jié)束后,才能分派cpu給其它的子線程,充分保證進(jìn)程運(yùn)轉(zhuǎn)的有序化。


  一、線程同步運(yùn)作混亂難題


  我們首先要建立3個(gè)案例,t1,t2,t3t1案例調(diào)用function1函數(shù)公式,t2和t3調(diào)用函數(shù)function11函數(shù)公式,她們都是對(duì)靜態(tài)變量l1來操作


  代碼如下:


  import threading,time
  l1=[]
  #創(chuàng)建RLock鎖,acquire幾次,release幾次
  lock=threading.RLock()
  def function1(x,y):
  for i in range(x):
  l1.append(i)
  if i==0:
  time.sleep(1)
  end_time=time.time()
  print("t{}is finished in{}s".format(y,end_time-time1))
  def function11(x,y):
  for i in range(x):
  l1.append(i)
  end_time=time.time()
  print("t{}is finished in{}s".format(y,end_time-time1))
  #2.創(chuàng)建子線程:thread類
  if __name__=='__main__':
  t1=threading.Thread(target=function1,args=(100,1))
  t2=threading.Thread(target=function11,args=(100,2))
  t3=threading.Thread(target=function11,args=(100,3))
  time1=time.time()
  print("time starts in{}".format(time1))
  t1.start()
  t2.start()
  t3.start()
  print(l1)

  結(jié)果如下:


  runfile('E:/桌面/temp.py',wdir='E:/桌面')


  time starts in 1656474963.9487


  t2 is finished in 0.0s


  t3 is finished in 0.0s


  [0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99]


  t1 is finished in 1.0152690410614014s


  我們可以看到,全局變量中開頭有兩個(gè)0,而不是按著0,1,2,3的方式按序填充,所以可以得知全局變量在多線程中是被多個(gè)函數(shù)無序調(diào)用的。為了保證多線程有序調(diào)用全局變量,我們可以利用threading.join()的方法。


  二、“join方法”解決多線程運(yùn)行無序問題


  我們重寫了function1函數(shù),并命名為function2,t1調(diào)用function2函數(shù)。t2,t3不變。


  代碼如下:


  import threading,time
  l1=[]
  #創(chuàng)建RLock鎖,acquire幾次,release幾次
  lock=threading.RLock()
  def function1(x,y):
  for i in range(x):
  l1.append(i)
  if i==0:
  time.sleep(1)
  end_time=time.time()
  print("t{}is finished in{}s".format(y,end_time-time1))
  def function11(x,y):
  for i in range(x):
  l1.append(i)
  end_time=time.time()
  print("t{}is finished in{}s".format(y,end_time-time1))
  def function2(x,y):
  for i in range(x):
  l1.append(i)
  if i==0:
  time.sleep(1)
  end_time=time.time()
  print("t{}is finished in{}s".format(y,end_time-time1))
  #2.創(chuàng)建子線程:thread類
  if __name__=='__main__':
  t1=threading.Thread(target=function2,args=(100,1))
  t2=threading.Thread(target=function11,args=(100,2))
  t3=threading.Thread(target=function11,args=(100,3))
  time1=time.time()
  print("time starts in{}".format(time1))
  t1.start()
  t1.join()
  t2.start()
  t3.start()
  print(l1)


  結(jié)果如下:


  runfile('E:/桌面/temp.py',wdir='E:/桌面')


  time starts in 1656476057.441827


  t1 is finished in 1.0155227184295654s


  t2 is finished in 1.0155227184295654s


  t3 is finished in 1.0155227184295654s


  [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99]


  由此可見,threading.join()方法可以解決多線程無序問題


  三、threading.Thread()的常見主要參數(shù)


  1.group:初始值None,要實(shí)現(xiàn)ThreadGroup類而保存


  2.target:在start方法中啟用可啟用目標(biāo),即必須打開進(jìn)程可啟用目標(biāo),例如函數(shù)公式、方式


  3.name:默認(rèn)“Thread-N”,字符數(shù)組方式的進(jìn)程名字


  4.args:默認(rèn)空數(shù)組,主要參數(shù)target中傳到可啟用對(duì)象主要參數(shù)數(shù)組


  5.kwargs:默認(rèn)空詞典{},主要參數(shù)target中傳到可啟用對(duì)象關(guān)鍵字參數(shù)詞典


  6.daemon:默認(rèn)None


  匯總


  到這里這一篇有關(guān)線程同步python的完成及線程同步井然有序類文章就分享到這了

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/128716.html

相關(guān)文章

  • Synchronize和ReentrantLock區(qū)別

    摘要:的鎖是非公平鎖,默認(rèn)情況下也是非公平鎖,但可以通過帶布爾值的構(gòu)造函數(shù)要求使用公平鎖。有序性,是保證線程內(nèi)串行語義,避免指令重排等。公平性是減少線程饑餓個(gè)別線程長期等待鎖,但始終無法獲取情況發(fā)生的一個(gè)辦法。 目錄介紹 1.Synchronize和ReentrantLock區(qū)別 1.1 相似點(diǎn) 1.2 區(qū)別 1.3 什么是線程安全問題?如何理解 1.4 線程安全需要保證幾個(gè)基本特性 ...

    FuisonDesign 評(píng)論0 收藏0
  • java內(nèi)存模型和線程

    摘要:內(nèi)存之間的交互關(guān)于主內(nèi)存和工作內(nèi)存之間的具體交互協(xié)議,內(nèi)存模型定義了中操作來完成,虛擬機(jī)實(shí)現(xiàn)的時(shí)候必須保證每個(gè)操作都是原子的,不可分割的對(duì)于和有例外鎖定作用于主內(nèi)存變量,代表一個(gè)變量是一條線程獨(dú)占。 并發(fā)不一定依賴多線程,但是在java里面談?wù)摬l(fā),大多與線程脫不開關(guān)系。 線程是大多是面試都會(huì)問到的問題。我們都知道,線程是比進(jìn)程更輕量級(jí)的調(diào)度單位,線程之間可以共享內(nèi)存。之前面試的時(shí)候,...

    shiyang6017 評(píng)論0 收藏0
  • Week 1 - Java 多線程 - Java 內(nèi)存模型

    摘要:目的是解決由于多線程通過共享內(nèi)存進(jìn)行通信時(shí),存在的原子性可見性緩存一致性以及有序性問題。最多只有一個(gè)線程能持有鎖。線程加入規(guī)則對(duì)象的結(jié)束先行發(fā)生于方法返回。 前言 學(xué)習(xí)情況記錄 時(shí)間:week 1 SMART子目標(biāo) :Java 多線程 學(xué)習(xí)Java多線程,要了解多線程可能出現(xiàn)的并發(fā)現(xiàn)象,了解Java內(nèi)存模型的知識(shí)是必不可少的。 對(duì)學(xué)習(xí)到的重要知識(shí)點(diǎn)進(jìn)行的記錄。 注:這里提到的是Ja...

    zhaofeihao 評(píng)論0 收藏0
  • Java內(nèi)存模型

    摘要:內(nèi)存模型對(duì)內(nèi)存模型的介紹對(duì)內(nèi)存模型的結(jié)構(gòu)圖的線程之間的通信是通過共享內(nèi)存的方式進(jìn)行隱式通信,即線程把某狀態(tài)寫入主內(nèi)存中的共享變量,線程讀取的值,這樣就完成了通信。 Java內(nèi)存模型(JMM) 1.對(duì)內(nèi)存模型的介紹 ①對(duì)Java內(nèi)存模型的結(jié)構(gòu)圖 java的線程之間的通信是通過共享內(nèi)存的方式進(jìn)行隱式通信,即線程A把某狀態(tài)寫入主內(nèi)存中的共享變量X,線程B讀取X的值,這樣就完成了通信。是一種...

    sherlock221 評(píng)論0 收藏0
  • (七)Volatile作用原理

    摘要:文章簡介分析的作用以及底層實(shí)現(xiàn)原理,這也是大公司喜歡問的問題內(nèi)容導(dǎo)航的作用什么是可見性源碼分析的作用在多線程中,和都起到非常重要的作用,是通過加鎖來實(shí)現(xiàn)線程的安全性。而的主要作用是在多處理器開發(fā)中保證共享變量對(duì)于多線程的可見性。 文章簡介 分析volatile的作用以及底層實(shí)現(xiàn)原理,這也是大公司喜歡問的問題 內(nèi)容導(dǎo)航 volatile的作用 什么是可見性 volatile源碼分析 ...

    marek 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<