多執行緒——原子、非原子,自旋鎖和互斥鎖
- nonatomic:非原子屬性,執行緒不安全的,效率高
- atomic:原子屬性,執行緒安全的,效率相對低。
原子屬性是一種單(執行緒)寫多(執行緒)讀的多執行緒技術,不過可能會出現髒資料
- atomic屬性內部的鎖稱為 自旋鎖
- 凡是執行緒安全的物件,內部肯定會加鎖。
- 自旋鎖和互斥鎖
- 相同點:都能保證同一時間只有一個執行緒訪問共享資源。都能保證執行緒安全。
- 不同點:
- 互斥鎖:如果共享資料已經有其他執行緒加鎖了,執行緒會進入休眠狀態等待鎖。一旦被訪問的資源被解鎖,則等待資源的執行緒會被喚醒。
- 自旋鎖:如果共享資料已經有其他執行緒加鎖了,執行緒會以死迴圈的方式等待鎖,一旦被訪問的資源被解鎖,則等待資源的執行緒會立即執行。
- 自旋鎖的效率高於互斥鎖。
IOS開發建議
- 所有屬性都宣告為nonatomic
- 儘量避免多執行緒搶奪同一塊資源
- 儘量將加鎖、資源搶奪的業務邏輯交給伺服器端處理,減少移動客戶端的壓力
相關推薦
多執行緒——原子、非原子,自旋鎖和互斥鎖
nonatomic:非原子屬性,執行緒不安全的,效率高 atomic:原子屬性,執行緒安全的,效率相對低。 原子屬性是一種單(執行緒)寫多(執行緒)讀的多執行緒技術,不過可能會出現髒資料 atomi
python多執行緒————3、多執行緒間通訊:共享變數,queue
1、共享變數 #通過共享變數 import time import threading url_list = [] def get_detail_html(): global url_list while True: if len(url_list):
如何實現多執行緒?實現多執行緒為什麼要調start,而不是run方法?(繼承Thread類、實現Ruable介面、Callable<V>)
什麼是程序? 作業系統中一個程式的執行週期(從開啟到關閉)。程序是具有一個或多個執行緒的執行緒組。 什麼是執行緒? 一個程序可以同時執行多個任務,任務就是執行緒,一個程序至少有一個執行緒。 執行緒執行在程序內部,執行緒是輕量級程序。 程序和執行緒比較:
[Xcode10 實際操作]八、網路與多執行緒-(7)使用MessageUI框架,建立併發送一封帶有附件的郵件
本文將演示如何使用MessageUI框架,建立併發送一封帶有附件的郵件。 使用郵件編輯檢視控制器(MFMailComposeViewController)實現郵件功能。 在專案導航區,開啟檢視控制器的程式碼檔案【ViewController.swift】 1 import UIKit 2
秒殺多執行緒第三篇 原子操作 Interlocked系列函式
上一篇《多執行緒第一次親密接觸 CreateThread與_beginthreadex本質區別》中講到一個多執行緒報數功能。為了描述方便和程式碼簡潔起見,我們可以只輸出最後的報數結果來觀察程式是否執行出錯。這也非常類似於統計一個網站每天有多少使用者登入,每個使用者登入用一個執
java多執行緒Future、FutureTask使用示例,返回非同步的結果
1、Future、FutureTask介紹 Future是一個介面,該介面用來返回非同步的結果。 FutureTask是一個類,是Future 的一個實現。 2、主要方法 future.get(); 或者 future.get(10000, Ti
C++多執行緒-第一篇-Atomic-原子操作
此係列基於Boost庫多執行緒,但是大部分都在C++11中已經實現,所以兩者基本一致。沒什麼特殊要求,練手還是C++11吧,方便不用配置。 PS:Boost不愧為C++準標準庫。 本來不打算寫,畢竟都是書上的內容,但是後來發現查書太麻煩,所以動手寫了這個系列,幫助我只看程式
如何實現多執行緒?實現多執行緒為什麼要調start,而不是run方法?(繼承Thread類、實現Ruable介面、Callable)
什麼是程序? 作業系統中一個程式的執行週期(從開啟到關閉)。程序是具有一個或多個執行緒的執行緒組。 什麼是執行緒? 一個程序可以同時執行多個任務,任務就是執行緒,一個程序至少有一個執行緒。 執行緒執行在程序內部,執行緒是輕量級程序。 程序和執行緒比較: 與
利用多執行緒(用到原子類AtomicInteger)往資料庫批量插入大量資料
package duocharu; import com.minisay.base.util.OJDBCUtils; import java.sql.Connection; import java.sql.PreparedStatement; import
python多執行緒非同步post請求指令碼,可以設定持續執行時間、執行緒數、時間間隔
#coding=utf8 ''' random.randint(a, b):用於生成一個指定範圍內的整數。 其中引數a是下限,引數b是上限,生成的隨機數n: a <= n <= b random.choice(sequence):從序列中獲取一個隨機元素 引數
多執行緒程式設計學習八(原子操作類).
簡介 Java 在 JDK 1.5 中提供了 java.util.concurrent.atomic 包,這個包中的原子操作類提供了一種用法簡單、效能高效、執行緒安全地更新一個變數的方式。主要提供了四種類型的原子更新方式,分別是原子更新基本型別、原子更新陣列、原子更新引用和原子更新屬性。 Atomic 類基本
C#多執行緒系列(3):原子操作
本章主要講述多執行緒競爭下的原子操作。 目錄知識點競爭條件執行緒同步CPU時間片和上下文切換阻塞核心模式和使用者模式Interlocked 類1,出現問題2,Interlocked.Increment()3,Interlocked.Exchange()4,Interlocked.CompareExchange
python多執行緒————8、多執行緒與多程序對比
#多程序程式設計 #耗cpu的操作,用多程序程式設計,對於io操作來說,使用多執行緒程式設計,程序切換代價要高於執行緒 import time from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor,as_compl
python多執行緒————7、ThreadPoolExecutor執行緒池
所用到的模組:from concurrent.futures import ThreadPoolExecutor,as_completed,wait,FIRST_COMPLETED 1、建立執行緒池:executor = ThreadPoolExecutor(max_workers= ) 2
python多執行緒————6、執行緒同步之Semaphore
控制程式碼進入執行緒的數量,控制併發數量,可以使用訊號量Semaphore。 1、定義訊號量sem = threading.Semaphore(3) #3為併發數量 2、消耗訊號量 sem.acquire() 3、釋放訊號量 sem.release()
pyhon多執行緒——5、執行緒同步之condition
如何使用多執行緒實現一問一答呢?可以使用condition中的notify和wait方法實現,看程式碼 import threading import time class XiaoAi(threading.Thread): def __init__(self,cond):
python多執行緒————4、執行緒同步之Lock,RLock
在多執行緒同時請求同一個資源並進行修改時可能會造成結果出錯,例如共享變數 from dis import dis import threading a = 0 def add(): global a
python多執行緒———2、建立多執行緒的兩種方式
法一、使用Thread類例項化 法二、繼承Thread來實現多執行緒 #對於io操作來說,多執行緒和多程序效能差別不大 #1、使用Thread類例項化 import time import threading def get_detail_html(url): prin
python多執行緒——1、GIL
一、GIL是什麼? 執行緒全域性鎖(Global Interpreter lock),python保護執行緒安全而採取的獨立執行緒執行的限制。 1、明確一點GIL並不是python的特性,pytho
實現java多執行緒的3種方式,99%人沒用過第3種
實現多執行緒的3種方式 1、繼承Thread類 看jdk原始碼可以發現,Thread類其實是實現了Runnable介面的一個例項,繼承Thread類後需要重寫run方法並通過start方法啟動執行緒。 繼承Thread類耦合性太強了,因為java只能單繼承,所以不利