问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

ios 线程与进程

发布网友 发布时间:2022-04-22 10:02

我来回答

1个回答

热心网友 时间:2023-10-09 21:19

1.进程 

 具有一定独立功能的程序关于某次数据集合的一次运行活动,他是操作系统分配资源的基本单位。

进程是指系统正在运行的一个应用程序,就是一段程序的执行过程。

各进程之间相互独立,每个进程都运行在受保护的内存空间内,拥有独立运行所需的全部资源。

2. 线程

进程的最小执行单元。线程是一个进程的实体。

一个进程要想执行任务,就必须至少又一个线程,当程序启动时,系统默认开启一条线程,也就是主线程。

3、 进程与线程的关系

线程是进程的执行单元,进程的所有任务都在线程中执行

线程是CPU分配和执行任务的最小单元

一个程序可以有多进程,一个进程可以有多线程 ,但是一个进程至少有一个线程

同一个进程内的线程共享进程内的资源

4 多线程原理

同一时间内单核CPU 只执行一个线程,多线程是CPU 在单位时间内在多个线程之间切换,造成多个线程被同时执行的假象。

多核CPU 就可以执行多个线程

多线程的目的是同步执行多个线程,来提高运行效率

5、多线程的优缺点

有点:提高执行效率 能够提高CPU的使用率

缺点:占用一定的系统内存空间  线程越多 CPU 调度线程的开销越大 程序设计复杂(线程之间的通信 数据共享)

6、多线程并发 与并行区别

并发:在一条线程上快速切换 

并行: 利用多核CPU ,多线程同时进行

7、IOS 中的多线程

NSThread 需要手动创建 不需要销毁 子线程通信很难

GCD c语言,充分利用了设备的多核,自动管理线程生命周期。比NSOperation效率更高。

NSOperation  基于*封装,更加面向对象,比*多了一些功能。

8、多个网络请求如何执行下一步

使用GCD的dispatch_group_t  

创建一个dispatch_group_t

每次网络请求前先dispatch_group_enter,请求回调后再dispatch_group_leave,enter和leave必须配合使用,有几次enter就要有几次leave,否则group会一直存在。

当所有enter的block都leave后,会执行dispatch_group_notify的block。

    NSString *str = @"http://www.jianshu.com/p/6930f335adba";

    NSURL*url = [NSURLURLWithString:str];

    NSURLRequest*request = [NSURLRequestrequestWithURL:url];

    NSURLSession *session = [NSURLSession sharedSession];

    dispatch_group_tdownloadGroup =dispatch_group_create();

    for ( int i=0; i<10; i++) {

        dispatch_group_enter(downloadGroup);

        NSURLSessionDataTask*task = [sessiondataTaskWithRequest:requestcompletionHandler:^(NSData* _Nullable data,NSURLResponse* _Nullable response,NSError* _Nullable error) {

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

            dispatch_group_leave(downloadGroup);

        }];

        [taskresume];

    }

    dispatch_group_notify(downloadGroup, dispatch_get_main_queue(), ^{

        NSLog(@"end");

    });

7.多个网络请求顺序执行后如何执行下一步?

使用信号量semaphore

每一次遍历,都让其dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER),这个时候线程会等待,阻塞当前线程,直到dispatch_semaphore_signal(sem)调用之后

NSString*str=@"http://www.jianshu.com/p/6930f335adba";

NSURL*url=[NSURL URLWithString:str];

NSURLRequest*request=[NSURLRequest requestWithURL:url];

NSURLSession*session=[NSURLSession sharedSession];

dispatch_semaphore_t sem=dispatch_semaphore_create(0);

for(inti=0;i<10;i++){

NSURLSessionDataTask*task=[session dataTaskWithRequest:request completionHandler:^(NSData*_Nullable data,NSURLResponse*_Nullable response,NSError*_Nullable error){

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

dispatch_semaphore_signal(sem);

}];

[task resume];

dispatch_semaphore_wait(sem,DISPATCH_TIME_FOREVER);

}

dispatch_async(dispatch_get_main_queue(),^{

NSLog(@"end");

});
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果手机微信怎么换漂亮字体(苹果手机微信怎么换行输入) 有什么好用的app转换字体 手写转文字的软件 erp可以看评论地址吗 淘宝评论url是什么意思? 揭秘:码牌支付风控升级,背后真相揭秘 电脑电视直播软件哪个好用什么软件好电脑看电视直播 潼南子同街学区是哪些 三极管BU406价格和参数? 火锅料放在冰柜忘了插电一个星期给会坏了吗 火锅的设备有哪些 nsurlsession设置invalidateandcancel是什么意思 nsurlsession怎么添加多任务 nsurlsession和nsurlconnection的区别 ios nsurlsession是用什么实现的 nsurlsessiond 这个是什么东西 ios uiwebview支持ipv6吗 nsurlsessiond是什么进程,不脑谏洗鳎琈ac OS X 讨论区 usr&#47;sbin&#47;netbiosd 和&#47;usr&#47;libexec&#47;nsurlsessiond 都是什么进程 nsurlsessiond这个进程到底是什么鬼 nsurlsessiond 这个是什么东西 MAC 里面的nsurlsessiond进程是是什么啊 怎样用肉皮炖皮冻 怎样炸肉皮? 肉皮怎么煮出来好吃 具体怎么做,煮猪皮要放什么配料 油汆肉皮的加工方法做法大全 怎样做油肉皮 换硒鼓,到底要不要换配件,还是只要换鼓芯就可以了? 硒鼓和粉盒需要一起更换吗 油汆肉皮的做法大全 nsurlsessiondownloadtask怎么同步执行 404 Not Found nsurlsession怎么支持 https请求 如何获取数据从 NSURLSessionDataTask 返回 MAC 里面的nsurlsessiond进程是是什么啊 nsurlsession缓存在哪 怎样使用 nsurlsession 进行同步请求,可在下面直接调用请求下来的数据 nsurlsession是否有重发机制 治疗前列腺的土方法? 一长期大量喝酒能引起小便不畅吗? 求一偏方治疗前列腺!!! 如果得是真的话!追加50分 求前列腺肥大增生的特效药或偏方? 前列腺炎吃什么中药偏方最好 前列腺有什么特效葯嘛?有什么偏方嘛? 前列腺有什么特效葯嘛?有什么偏方嘛? 想治前列腺 想治前列腺 404 Not Found 404 Not Found 鏈夐┈娑﹀湪灏辫屼簡锛屾垜浠鍦ㄤ笉鍦ㄦ剰涔変笉澶是什么字