进程与线程

来源:互联网 发布:mac运行iphone应用 编辑:程序博客网 时间:2024/05/17 17:45

线程也被称作是轻量级进程(LWP),是调度和分派的基本单位,而进程是拥有资源的基本单位。子进程和父进程拥有不同的代码和数据空间,而同一进程创建出的多个线程共享代码和数据空间,只是有各自的堆栈和程序计数器。由于线程共享代码和数据空间,所以其切换、创建等所用到的开销要远远小于进程,并且因为同一进程的线程由于共享同一地址空间,同步和通信业变得更加容易。

一个标准的线程由线程ID、当前指令指针(PC)、寄存器集合和堆栈组成。通常意义下,一个进程有一个到多个线程组成,个线程之间共享程序的地址空间(代码段、数据段、堆等)及一些进程级的资源(如打开的文件和占有的信号)。


使用多线程的原因如下:

1、某些操作可能会陷入长时间的等待,等待的线程会进入睡眠状态,无法继续执行。多线程可以有效的利用等待的时间。

2、通常给消耗CPU操作一个线程,用户交互的一个线程,防止因CPU大量计算而交互中断。

3、程序本身就需要并发操作,如多线程下载。

4、在多CPU或者多核的情况下,多线程可以充分利用系统能力。

5、相对于多进程应用,多线程在数据共享方面的效率要高的多。


在实际应用中,window内核有着明确的线程和进程的概念,而linux中所有的执行实体(无论线程还是进程)都成为任务(task),每个任务在概念上都类似于一个单线程的进程,不过linux下不同任务可以选择共享内存空间,因此也就有了线程的意思。


进程或者线程的基本转换图如下所示:


原创粉丝点击