线程与进程的区别和联系?

线程与进程的区别和联系?

一个程序至少要有进城,一个进程至少要有一个线程。
进程:资源分配的最小独立单元,进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。
线程:进程下的一个分支,是进程的实体,是CPU调度和分派的基本单元,它是比进程更小的能独立运行的基本单位,线程自己基本不拥有系统资源,只拥有一点在运行中必不可少的资源(程序计数器、一组寄存器、栈),但是它可与同属一个进程的其他线程共享进程所拥有的全部资源。
进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。
进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。
但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。
多线程编程

NSThread:当需要进行一些耗时操作时会把耗时的操作放到线程中。线程同步:多个线程同时访问一个数据会出问题,NSlock、线程同步块、@synchronized(self){}。
NSOperationQueue操作队列(不需考虑线程同步问题)。编程的重点都放在main里面,NSInvocationOperation、BSBlockOperation、自定义Operation。创建一个操作绑定相应的方法,当把操作添加到操作队列中时,操作绑定的方法就会自动执行了,当把操作添加到操作队列中时,默认会调用main方法。
GCD(`Grand Central Dispatch)宏大的中央调度,串行队列、并发队列、主线程队列;
同步和异步:同步指第一个任务不执行完,不会开始第二个,异步是不管第一个有没有执行完,都开始第二个。
串行和并行:串行是多个任务按一定顺序执行,并行是多个任务同时执行;
代码是在分线程执行,在主线程嘟列中刷新UI。
多线程编程是防止主线程堵塞、增加运行效率的最佳方法。

Apple提供了NSOperation这个类,提供了一个优秀的多线程编程方法;
一个NSOperationQueue操作队列,相当于一个线程管理器,而非一个线程,因为你可以设置这个线程管理器内可以并行运行的线程数量等。
多线程是一个比较轻量级的方法来实现单个应用程序内多个代码执行路径。
iPhoneOS下的主线程的堆栈大小是1M。第二个线程开始就是512KB,并且该值不能通过编译器开关或线程API函数来更改,只有主线程有直接修改UI的能力。
定时器与线程的区别

定时器;可以执行多次,默认在主线程中。
线程:只能执行一次。
进程线程是操作系统中进行任务调度和资源分配的两个基本单位,它们在**资源分配、独立性以及调度切换**等方面有所区别。以下是具体分析: 1. **资源分配** - **进程**:进程是操作系统资源分配的基础单元,拥有独立的内存空间。每个进程至少有一个执行线程进程间的资源是相互独立的,拥有自己的地址空间。 - **线程**:线程是CPU调度的基础单元,可以共享属于其父进程的资源,如堆和方法区。线程相较于进程,系统在创建或切换时的负担更小,因此常被视为轻量级进程。 2. **独立性** - **进程**:能够独立运行,并在发生错误时互不影响,因此具备良好的容错性。 - **线程**:虽然共享相同进程的资源,但每个线程还是有自己独立的程序计数器、虚拟机栈和本地方法栈,使得线程在一定程度上也可独立执行。 3. **调度切换** - **进程**:由于进程间的独立性,切换时需要独立的资源空间,所以开销较大。 - **线程**:由于共享同一进程资源,切换成本较低,可实现更高效的上下文切换。 4. **系统开销** - **进程**:进程间资源的独立性导致其创建和撤销的系统开销较大。 - **线程**:因为共享进程资源,创建和撤销的系统开销较小。 5. **并发性能** - **进程**:可以在多核处理器上并行运行,提高应用的吞吐量。 - **线程**:由于共享进程资源,并行处理多个线程进程更加高效,尤其在IO密集型的应用中体现得更为明显。 6. **编程复杂性** - **进程**:进程间的通信(IPC)较为复杂,需要操作系统提供相应的机制进行支持。 - **线程**:线程间的通信相对简单,可以通过直接读写进程数据段的方式实现。 7. **架构设计** - **进程**:在设计上,进程模型更适合于那些需要独立运行、耦合度低的任务。 - **线程**:而线程模型则适用于紧密协作的任务,例如web服务器处理并发请求的情况。 8. **执行控制流** - **进程**:一个进程至少包含一个执行控制流,可以同时处理多个任务。 - **线程**:线程进程中的执行控制流,负责当前进程中的程序执行。 针对上述分析,提出以下几点建议: - 考虑系统的性能需求,是否需要高并发处理。 - 根据应用的特性选择适合的并行处理模式(进程线程)。 - 注意线程安全问题,合理使用同步机制以避免竞争条件。 - 考虑资源消耗和系统开销,以优化资源使用。 - 评估系统的可伸缩性,确保在高负载下也能保持良好的性能。 总的来说,多线程技术尤其适合IO密集型或者需要高并发处理的应用,而多进程则更适合计算密集型或者需要隔离和安全性的场景。在选择使用哪种方式时,开发者需要根据实际的应用需求和预期的系统负载来做出决策。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值