當前位置:成語大全網 - 書法字典 - Ios線程和進程

Ios線程和進程

1.過程

?具有壹定獨立功能的程序是壹個數據集的運行活動,數據集是操作系統分配資源的基本單位。

進程是指系統正在運行的應用程序,即程序的執行過程。

這些進程相互獨立,每個進程都在受保護的內存空間中運行,並擁有獨立運行所需的所有資源。

2.線

進程的最小執行單位。線程是進程的壹個實體。

如果壹個進程想要執行壹個任務,它必須至少有壹個以上的線程。程序啟動時,系統默認會啟動壹個線程,就是主線程。

3.進程和線程之間的關系

線程是進程的執行單元,進程的所有任務都在線程中執行。

線程是CPU分配和執行任務的最小單位。

壹個程序可以有多個進程,壹個進程可以有多個線程,但是壹個進程至少有壹個線程。

同壹個進程中的線程* * *共享進程中的資源。

4多線程原理

單核CPU同壹時間只執行壹個線程,多線程是CPU在單位時間內多個線程之間切換的假象,導致多個線程同時執行。

多核CPU可以執行多個線程。

多線程的目的是同時執行多個線程,提高運行效率。

5.多線程的優點和缺點

壹點:提高執行效率可以提高CPU利用率。

缺點:占用壹定的系統內存空間?線程越多,CPU調度線程的開銷就越高,編程就越復雜(線程之間的通信數據是共享的)。

6.多線程並發和並行的區別

並發:在壹個線程上快速切換?

並行:使用多核CPU,多線程同時進行。

7.IOS中的多線程

NSThread需要手動創建,不破壞子線程很難通信。

GCD?c語言充分利用了設備的多核,自動管理線程生命周期。比NSOperation更高效。

基於gcd封裝,NSOperation比gcd更面向對象,功能更多。

8.如何對多個網絡請求執行下壹步?

使用GCD的dispatch_group_t。

創建壹個調度組。

每次網絡請求前,dispatch_group_enter,請求回撥後,再dispatch_group_leave。進入和離開必須壹起使用,幾次進入必須有幾次離開,否則群將壹直存在。

當所有的enter塊都離開時,將執行dispatch_group_notify塊。

ns string * str = @ "/p/6930 f 335 adba ";

NSURL * URL =[nsurlrwithstring:str];

NSURLRequest * request =[nsurlrequestwithrul:URL];

NSURLSession * session =[NSURLSession shared session];

dispatch _ group _ tdownloadGroup = dispatch _ group _ create();

for(int I = 0;我& lt10;i++) {

dispatch _ group _ enter(download group);

nsurlsessiondatatask * task =[sessiondatataskwithrequest:requestcompletionhandler:^(nsdata* _可空數據,nsurlresponse * _可空響應,nserror * _可空錯誤){

NSLog(@"%d - %d ",I,I);

dispatch _ group _ leave(download group);

}];

[任務簡歷];

}

dispatch_group_notify(下載組,dispatch_get_main_queue(),^{

NSLog(@“end”);

});

7.多個網絡請求按順序執行後,如何執行下壹步?

使用旗語旗語

每次遍歷,讓其dispatch _ semaphore _ wait (SEM,dispatch _ time _ forever)。此時,線程將等待並阻塞當前線程,直到調用dispatch_semaphore_signal(sem)為止。

ns string * str = @ "/p/6930 f 335 adba ";

NSURL * URL =[NSURL URL with string:str];

NSURLRequest * request =[nsurlrequestrequestwithrul:URL];

NSURLSession * session =[NSURLSession shared session];

dispatch _ semaphore _ t SEM = dispatch _ semaphore _ create(0);

for(inti = 0;我& lt10;i++){

nsurlsessiondatatask * task =[session datataskwithrequest:請求completionhandler:^(nsdata*_nullable數據,nsurlresponse * _ nullable response,NSError*_Nullable error){

NSLog(@"%d - %d ",I,I);

調度_信號量_信號(SEM);

}];

[任務簡歷];

dispatch_semaphore_wait(sem,DISPATCH _ TIME _ ever);

}

dispatch_async(dispatch_get_main_queue(),^{

NSLog(@“end”);

});