日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

并发编程--多线程

發(fā)布時(shí)間:2024/7/5 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 并发编程--多线程 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

  • 多線程
    • 什么是線程
    • 進(jìn)程和線程的對(duì)比
    • 使用線程的優(yōu)勢(shì)
    • 線程的使用
    • 線程安全問題
    • 守護(hù)線程
    • 線程中的常用屬性和方法

多線程

什么是線程

進(jìn)程是操作系統(tǒng)可以調(diào)度已經(jīng)進(jìn)行資源分配的基本單位,是一個(gè)資源單位,其中包含了運(yùn)行這個(gè)程序所需的資源

  • 線程是操作系統(tǒng)可以運(yùn)算調(diào)度的最小單位,是真正的執(zhí)行單位,其包含在進(jìn)程中, 一個(gè)線程就是一條固定的控制流程, 一個(gè)進(jìn)程可以包含多個(gè)線程,同一進(jìn)程中的線程共享進(jìn)程內(nèi)的資源

特點(diǎn):系統(tǒng)會(huì)為每一個(gè)進(jìn)程自動(dòng)創(chuàng)建一條線程,稱之為主線程, 后續(xù)通過代碼開啟的線程稱之為子線程

進(jìn)程和線程的對(duì)比

計(jì)算機(jī)是一個(gè)工廠,進(jìn)程就是一個(gè)車間,線程就是車間內(nèi)的流水線

Item進(jìn)程線程
單位資源單位執(zhí)行單位
創(chuàng)建開銷開銷大開銷小
內(nèi)存關(guān)系內(nèi)存相互隔離共享進(jìn)程內(nèi)的所有資源
硬件資源競(jìng)爭關(guān)系協(xié)作關(guān)系
層級(jí)關(guān)系又上下層關(guān)系平等關(guān)系

使用線程的優(yōu)勢(shì)

  • 有多個(gè)任務(wù)要并發(fā)處理
  • 當(dāng)要并發(fā)處理的任務(wù)有很多的時(shí),不能使用進(jìn)程 進(jìn)程資源開銷太大 線程開銷非常小 適用于任務(wù)數(shù)非常多的情況
  • 線程的使用

  • 方式一:直接實(shí)例化Thread類

    from threading import Threaddef task():print("子線程 run")# 與進(jìn)程不同之處1 不需要加判斷 開啟線程的代碼放哪里都可以 t = Thread(target=task) t.start() print("over")
  • 方式二:繼承Thread類,覆蓋run方法

    class MyThread(Thread):def run(self):# 把要在子線中執(zhí)行的代碼放入run中print("子 run")mt = MyThread() mt.start() print("over")
  • 線程安全問題

    只要并發(fā)訪問了同一資源一定會(huì)產(chǎn)生安全問題,解決方案和多進(jìn)程一致,就是給操作公共資源代碼加鎖

    from threading import Thread,Lock import time a = 10l = Lock()def task():global al.acquire()temp = atime.sleep(0.1)a = temp - 1l.release()ts = [] for i in range(10):t = Thread(target=task)t.start()ts.append(t)for t in ts:t.join()print(a)

    守護(hù)線程

    一個(gè)線程a,設(shè)置為b的守護(hù)線程, a會(huì)隨著b的結(jié)束而結(jié)束

    默認(rèn)情況下,主線程即使代碼執(zhí)行完畢,也會(huì)等待所有非守護(hù)線程完畢后程序才能結(jié)束 ,因?yàn)槎鄠€(gè)線程之間是協(xié)作關(guān)系

    from threading import Thread import time# 妃子的一生 def task():print("妃子 start")time.sleep(5)print("妃子 over")def task2():print("皇太后 start")time.sleep(3)print("皇太后 over")# 皇帝的一生 print("主 start")t = Thread(target=task) # 守護(hù)線程,主線程結(jié)束就結(jié)束 t.daemon = True t.start()t2 = Thread(target=task2) # 非守護(hù)線程,主線程會(huì)等待非守護(hù)線程結(jié)束后再結(jié)束 t2.start() print("主 over")"""結(jié)果 主 start 妃子start 皇太后 start 主over 皇太后 over """

    線程中的常用屬性和方法

    from threading import Thread,currentThread,enumerate,activeCount import time# t = Thread() # t.start() # t.join() # t.is_alive() # 判斷線程是否開啟 # t.isAlive() # 判斷線程是否開啟 # t.ident # 線程標(biāo)識(shí)符 id # t.daemon# 獲取當(dāng)前線程對(duì)象 # print(currentThread()) # t = Thread(target=lambda :print(currentThread())) # t.start()t = Thread(target=lambda :time.sleep(1)) t.start()t = Thread(target=lambda :time.sleep(1)) t.start() t.join() # 獲取正在運(yùn)行的所有線程對(duì)象 是一個(gè)列表 print(enumerate())# 存活的線程數(shù)量 print(activeCount())

    轉(zhuǎn)載于:https://www.cnblogs.com/Hades123/p/11153637.html

    總結(jié)

    以上是生活随笔為你收集整理的并发编程--多线程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。