?具有壹定獨立功能的程序是壹個數據集的運行活動,數據集是操作系統分配資源的基本單位。
進程是指系統正在運行的應用程序,即程序的執行過程。
這些進程相互獨立,每個進程都在受保護的內存空間中運行,並擁有獨立運行所需的所有資源。
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”);
});