多執行緒基礎

2021-07-29 02:18:23 字數 612 閱讀 5658

多執行緒的最底層依賴於unsafe的compareandswap(cas)和locksupport的park和unpark操作。

cas需要傳遞兩個引數:expect和update。先跟第乙個引數expect進行比較,如果等於第乙個引數,那麼就將該值設定為第二個引數,

這是由硬體提供的原子操作,所以不會存在併發問題。cas會返回乙個boolean值表示這次更新是否成功,通常會用迴圈去不斷的嘗試

直到更新成功為止。通俗的講cas就是硬體級別的樂觀鎖。

park和unpark類似於wait和notify,不同的是wait和notify之間有先後順序關係,必須先呼叫wait之後才能呼叫notify,如果先呼叫

notify後呼叫wait,那麼呼叫wait的執行緒將會一直被阻塞。而park和unpark的實現類似二元訊號量(0和1),呼叫park會去申請許可,如果許可被占用了

那麼申請的執行緒就會被阻塞,直到其他執行緒呼叫unpark釋放了許可。該許可預設是被占用的。說了這麼多其實主要是要說明park和

unpark之間沒有先後順序的關係,可以先呼叫unpark,之後再呼叫park,這樣park的執行緒不會被阻塞,直接正常執行。但是許可最多只有乙個,呼叫

再多次的unpark也只會有乙個許可供使用。

多執行緒基礎

對於多執行緒程式設計,很多人概念不清,寫 的時候要麼是處處加鎖,影響效能不說,還容易莫名其妙的死鎖,還有人對多執行緒敬而遠之。所以學習多執行緒程式設計最重要的不是學習 api,而是理解什麼才是多執行緒安全的 從例子說起 include include long global1 0 volatile ...

多執行緒基礎

什麼是併發 同時執行多個程式,或者乙個程式的多段 在巨集觀上,存在併發的,但是在微觀上,其實不存在併發 時間片 在計算機中,使用時間片來實現併發的運算 在計算甲中,在最小的單位時間上 只能執行乙個運算 用來控制多個程式之間的輪轉,使得程式交替的執行 達到併發的目的 多個cpu 多個核心 才能實現真正...

多執行緒基礎

coding utf 8 import requests import threading import sys from time import sleep reload sys sys.setdefaultencoding utf 8 單執行緒 順序執行 如果第乙個人沒有執行完 第二個不能開始 ...