高洛峰2017-04-28 09:07:18
執行緒同步是在多執行緒下才會產生的,多個執行緒同時存取同一塊資源,為了安全且有效率的訪問,就要解決同步存取帶來的一系列問題。
打個比方,兩個人從一個籃子裡拿蘋果,如果一個拿完之後再讓另一個拿,那就不會出現問題,可是效率也不高。 (totalTime = timeOfA + timeOfB)
如果讓他們同時拿,你拿一個我拿一個,這樣效率就高了,可是會出現問題,兩個人都搶到一個蘋果那該歸誰呢,這時可以有幾個方法,A拿蘋果時B先等著,等A拿到了B在拿。或A只能拿A這邊的,B只能拿B這邊的。這樣就能解決問題了。
在iOS上最主要的方法就是在訪問期間加鎖,等到訪問完畢在解鎖。至於加什麼鎖怎麼加鎖,網路上很多資料講的都蠻詳細的。
为情所困2017-04-28 09:07:18
同步
异步
线程同步
,是不同的概念
接樓上同學的例子
你拿一個蘋果,然後我拿一個蘋果, 這叫同步
执行
你和我同时去拿苹果,这叫两个线程异步
执行,这里为了实现异步
,使用了多线程
的手段,你和我各属于一个线程
然后就会出现问题了,如果你和我伸手拿了同一个苹果怎么办? 这个时候就需要你和我进行线程同步
,比如:誰先看到籃子,就對籃子加鎖,讓另一個人等著,拿完之後解鎖
ringa_lee2017-04-28 09:07:18
很多人覺得異步就是多線程,這個是不對的,異步和多線程有區別的。
線程是程式碼啊,CPU要跑的程式碼啊,兩段線程程式碼一起跑給人一種沒有阻塞的感覺。但這還是代碼。 CPU還是在那裡等著。
非同步主要針對io來說,檔案的io,網路請求的io,你不想讓同步的io阻塞了進程,所以才有非同步方式提高回應能力,非同步要去作業系統訂閱事件委託閉包函數,和多線程是不能說一樣的。
如果你懂一點硬件,你可以感受一下中斷。
拿大家說的蘋果舉個例子…
異步是,你告訴電腦,給我拿個蘋果吧。
電腦就讓自己會拿蘋果的硬體去回應這個功能啦。跟CPU還有關係麼?沒了啦。就不耽誤CPU的事情啦。
蘋果是網路請求的時候,拿蘋果的就是網卡