ui多執行緒(1)並行和併發的區別,鎖的種類,同步非同步,阻塞非阻塞。
我不是怕忘了嗎
程序:單個cpu同一時刻只能執行乙個程序,單核的cpu可以雙開qq和網頁是因為時間碎片化的方法,就是不斷來回切換來達到假的多個程序同時進行的效果。
執行緒:乙個程序可以包含多個執行緒,就是乙個程式可以有多個功能一樣。
乙個程式執行的時候會申請乙個記憶體,然後所有的執行緒都是共有這個記憶體的。但是功能都占有一部分記憶體,有些記憶體只准乙個執行緒訪問,只時候就要加鎖。
並行:按照字面意思就是一起執行,指的是同一時刻同時執行多個程序,需要多核。
併發:指同時發生,這是用了時間碎片化,給人的感覺像是同時發生,其實是有間隔的。
鎖分為:(1)互斥鎖(mutex),什麼特徵都沒有,不管什麼鑰匙都能開,只要開了關了就好了。只有一把,是最基本的鎖。適用於只能乙個執行緒訪問的。
(2)訊號量(semphore):乙個記憶體區域可以有多個執行緒訪問,但是訪問的個數有限制,這時候就要用訊號量了,就是互斥鎖的公升級版。
執行緒池:就是放執行緒的池子,就是開闢一塊記憶體放入多個執行緒,使用的時候就拿出來,可以增加效率。不用了就放回去。
同步非同步的主要差別就是是否需要在原地等待和接受任務完成訊號的方式不同。
同步:就是傻傻的自己呆在原地等任務完成然後自己接受訊號。
非同步:就是有個通知機制,系統會發個通知告訴它任務完成了。
阻塞:就是只有當前任務完成了他才能繼續下面的任務。
非阻塞:就是任務還沒完成,他就繼續往下執行了,他可以組別的任務。
多執行緒:
乙個程式有乙個主線程,所有會阻礙主線程的操作,都要放到多執行緒裡面去進行,比如(網路訪問)。
執行緒的五種狀態:
(1)新建(new) 新建任務的時候會自動新建一些執行緒的
(2)就緒 (runnable)就是執行緒放在了執行緒池中,隨時可以呼叫的。等待獲得cpu使用權。
(3)執行 (running) 就是執行緒開始執行了,執行**了,就是獲得了cpu使用權。
(4)阻塞 (block) 某種原因放棄了使用權,只有先進入就緒次才能繼續執行。
(5)死亡 (dead) 執行緒結束或者程式退出。
cancle和exit的區別:
1.cancel的作用只是將當前執行緒物件的cancelled屬性置成yes,標識此執行緒即將被終結。
2.exit的作用是終結當前執行緒。結束當前執行緒的生命週期,執行緒中剩餘的**將不再執行。
3.在設計程式程式應該設計乙個輪詢的機制(cancellation),一直在探測當前執行緒的cancelled屬性,如果此屬性為yes,就呼叫exit方法來終結當前執行緒。
*/#import "viewcontroller.h"
#import "customthread.h"
@inte***ce viewcontroller ()
@end
@implementation viewcontroller
- (void)viewdidload
- (void)thread1method
if (![[nsthread currentthread] ismainthread])
}- (void)cancelmultithread:(nsthread *)thread
多執行緒的「併發」和「並行」
併發 在單核和多核都可存在,就是 同一時間有多個可以執行的程序 但是在單核中同一時刻只有乙個程序獲得cpu,雖然巨集觀上你認為多個程序都在進行。並行是指同一時間多個程序在微觀上都在真正的執行,這就只有在多核的情況下了。多執行緒不是萬能的.它是併發的,也就是說,它在建立和切換資源時還要額外消耗資源.而...
併發 多執行緒 非同步 並行
一 基本概念 併發 同時處理多件事情,在處理第乙個請求時同時響應第二個請求 同步 同步就是順序執行,執行完乙個再執行下乙個,需要等待 協調執行,同步 呼叫在繼續之前等待響應或返回值。如果不允許呼叫繼續,就說呼叫被阻塞 了 非同步 併發的一種形式,1 它採用 機制,避免產生不必要的執行緒。2 多執行緒...
談談並行 併發或多執行緒
1.cpu的發展趨勢 核心數目依舊會越來越多,根據摩爾定律,由於單個核心效能提公升有著嚴重的瓶頸問題,普通的pc桌面在2018年可能回到24核心。2.併發和並行的區別 所有的併發處理都有排隊等候,喚醒和執行這三個步驟,所以併發是巨集觀的觀念,在微觀上他們都是序列被處理的,只不過資源不會在某乙個上被阻...