进程与线程

1.进程
进程是程序在计算机上的一次执行活动。当你运行一个程序,你就启动了一个进程。显然,程序是死的(静态的),进程是活的(动态的)。进程可以分为系统进程和用户进程。凡是用于完成操作系统的各种功能的进程就是系统进程,它们就是处于运行状态下的操作系统本身;其它进程就是用户进程。进程是操作系统进行资源分配的单位(比如文件句柄,虚拟地址空间等等)。

linux下创建子进程的调用是fork(),它功能就是产生子进程,其特别之处在于它会返回2次。

2.线程
线程是可执行代码的可分派单元。这个名称来源于“执行的线索”的概念。在基于线程的多任务的环境中,所有进程有至少一个线程,但是它们可以具有多个任务。这意味着单个程序可以并发执行两个或者多个任务。
简而言之,线程就是把一个进程分为很多片,每一片都可以是一个独立的流程。这已经明显不同于多进程了,进程是一个拷贝的流程,而线程只是把一条河流截成很多条小溪。它没有拷贝这些额外的开销,但是仅仅是现存的一条河流,就被多线程技术几乎无开销地转成很多条小流程,它的伟大就在于它少之又少的系统开销。
多线程是为了使得多个线程并行的工作以完成多项任务,以提高系统的效率。

3.使用线程的好处
使用线程的好处有以下几点:

.提高应用程序的响应:可以对任何一个包含许多相互独立的活动的程序进行重新设计,以便将每个活动定义为一个线程。例如,多线程 GUI 的用户不必等待一个活动完成即可启动另一个活动。
更有效地使用多处理器:通常,要求并发线程的应用程序无需考虑可用处理器的数量。使用额外的处理器可以明显提高应用程序的性能。具有高度并行性的数值算法和数值应用程序(如矩阵乘法)在多处理器上通过多个线程实现时,运行速度会快得多。
改进程序结构:许多应用程序都以更有效的方式构造为多个独立或半独立的执行单元,而非整块的单个线程。多线程程序比单线程程序更能适应用户需求的变化。
占用较少的系统资源:多进程与多线程相比,每个进程都有一个完整的地址空间和操作环境状态。每个进程用于创建和维护大量状态信息的成本,与一个线程相比,无论是在时间上还是空间上代价都更高。此外,进程间所固有的独立性使得程序员需要花费很多精力来处理不同进程间的通信。

4.进程和线程中拥有的资源
1) 进程中的资源:进程是操作系统分配资源的基本单位,进程的资源主要包括
地址空间(涉及到同步互斥的地址段主要是数据段和堆栈段)
打开的文件句柄
2.)线程中的资源:一个进程中的所有线程共享进程的地址空间(数据段/堆),打开的文件句柄,由线程独享的资源包括

线程专有数据区

5.总结
1)一个进程中的所有线程都必须运行相同的可执行程序(它们最多能做到的是运行相同可执行程序的不同部分)。而一个子进程可以运行一个完全不同的可执行程序。
2)进程是操作系统分配资源的基本单位,而线程则不是,线程独立拥有的主要是栈和线程专用缓冲区
3)由于同一个进程内的多个线程共享同一块虚拟内存和其它资源,因而一个线程出错可能会影响到同一个进程中的其它线程。而多进程环境下,一个进程出错并不会影响其它进程,因为每一个进程都拥有自己独立的资源。
4)创建新进程时的资源拷贝使得创建新的进程比创建新的线程效率底下很多。不过由于写时拷贝机制的存在,因而如果子进程不产生写请求,这个影响就会很小。
5)如果一个任务可以被分解为多个几乎完全相同的子任务,则多线程就可能是一个很好的选择。
6)由于同一个进程内的多个线程共享进程的资源,因而多个线程共享资源非常简单(当然,代价是必须防止出现竞态)。而多进程之间共享资源则需要通过IPC机制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值