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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

iOS开发多线程篇—多线程简介

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

iOS開發(fā)多線程篇—多線程簡(jiǎn)介

?

一、進(jìn)程和線程

1.什么是進(jìn)程

?

進(jìn)程是指在系統(tǒng)中正在執(zhí)行的一個(gè)應(yīng)用程序

每一個(gè)進(jìn)程之間是獨(dú)立的。每一個(gè)進(jìn)程均執(zhí)行在其專用且受保護(hù)的內(nèi)存空間內(nèi)

?

?

比方同一時(shí)候打開QQ、Xcode,系統(tǒng)就會(huì)分別啟動(dòng)2個(gè)進(jìn)程

通過“活動(dòng)監(jiān)視器”能夠查看Mac系統(tǒng)中所開啟的進(jìn)程

?

2.什么是線程

1個(gè)進(jìn)程要想運(yùn)行任務(wù),必須得有線程(每1個(gè)進(jìn)程至少要有1條線程)

線程是進(jìn)程的基本運(yùn)行單元,一個(gè)進(jìn)程(程序)的全部任務(wù)都在線程中運(yùn)行

比方使用酷狗播放音樂、使用迅雷下載電影,都須要在線程中運(yùn)行

?  

?

3.線程的串行

?

1個(gè)線程中任務(wù)的運(yùn)行是串行的

假設(shè)要在1個(gè)線程中運(yùn)行多個(gè)任務(wù),那么僅僅能一個(gè)一個(gè)地按順序運(yùn)行這些任務(wù)

也就是說,在同一時(shí)間內(nèi),1個(gè)線程僅僅能運(yùn)行1個(gè)任務(wù)

比方在1個(gè)線程中下載3個(gè)文件(各自是文件A、文件B、文件C

?

?

二、多線程

?

1.什么是多線程

1個(gè)進(jìn)程中能夠開啟多條線程,每條線程能夠并行(同一時(shí)候)運(yùn)行不同的任務(wù)

進(jìn)程?->車間,線程->車間工人

多線程技術(shù)能夠提高程序的運(yùn)行效率

比方同一時(shí)候開啟3條線程分別下載3個(gè)文件(各自是文件A、文件B、文件C

?

2.多線程的原理

?

同一時(shí)間。CPU僅僅能處理1條線程。僅僅有1條線程在工作(運(yùn)行)
多線程并發(fā)(同一時(shí)候)運(yùn)行。事實(shí)上是CPU高速地在多條線程之間調(diào)度(切換)
假設(shè)CPU調(diào)度線程的時(shí)間足夠快。就造成了多線程并發(fā)運(yùn)行的假象
思考:假設(shè)線程很許多,會(huì)發(fā)生什么情況?
CPU會(huì)在N多線程之間調(diào)度。CPU會(huì)累死,消耗大量的CPU資源
每條線程被調(diào)度運(yùn)行的頻次會(huì)減少(線程的運(yùn)行效率減少)

?

3.多線程的優(yōu)缺點(diǎn)

?

多線程的長(zhǎng)處

能適當(dāng)提高程序的運(yùn)行效率

能適當(dāng)提高資源利用率(CPU、內(nèi)存利用率)

?

多線程的缺點(diǎn)

開啟線程須要占用一定的內(nèi)存空間(默認(rèn)情況下。主線程占用1M,子線程占用512KB)。假設(shè)開啟大量的線程,會(huì)占用大量的內(nèi)存空間,減少程序的性能

線程越多,CPU在調(diào)度線程上的開銷就越大

程序設(shè)計(jì)更加復(fù)雜:比方線程之間的通信、多線程的數(shù)據(jù)共享

?

4.多線程在iOS開發(fā)中的應(yīng)用

主線程:一個(gè)iOS程序執(zhí)行后,默認(rèn)會(huì)開啟1條線程。稱為“主線程”或“UI線程”

主線程的主要作用

顯示\刷新UI界面

處理UI事件(比方點(diǎn)擊事件、滾動(dòng)事件、拖拽事件等)

?

?

主線程的使用注意:別將比較耗時(shí)的操作放到主線程中。

耗時(shí)操作會(huì)卡住主線程,嚴(yán)重影響UI的流暢度。給用戶一種“卡”的壞體驗(yàn)

?

5.代碼演示樣例

1 // 2 // YYViewController.m 3 // 01-堵塞主線程 4 // 5 // Created by apple on 14-6-23. 6 // Copyright (c) 2014年 itcase. All rights reserved. 7 // 8 9 #import "YYViewController.h" 10 11 @interface YYViewController () 12 - (IBAction)btnClick; 13 @end 14 15 16 @implementation YYViewController 17 18 19 - (void)viewDidLoad 20 { 21 [super viewDidLoad]; 22 } 23 24 25 //button的點(diǎn)擊事件 26 - (IBAction)btnClick { 27 //1.獲取當(dāng)前線程 28 NSThread *current=[NSThread currentThread]; 29 //2.使用for循環(huán)運(yùn)行一些耗時(shí)操作 30 for (int i=0; i<10000; i++) { 31 //3.輸出線程 32 NSLog(@"btnClick---%d---%@",i,current); 33 } 34 } 35 36 @end

?運(yùn)行效果:

說明:當(dāng)點(diǎn)擊運(yùn)行的時(shí)候,textView點(diǎn)擊無響應(yīng)。

運(yùn)行分析:等待主線程串行運(yùn)行。

開啟子線程。

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

總結(jié)

以上是生活随笔為你收集整理的iOS开发多线程篇—多线程简介的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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