线程与进程那些事

    今天女朋友突然问了个问题,让我给她讲讲线程与进程,我一想,对于我们程序员来说线程与进程不是小儿科的问题么,可是说了半天女朋友都没弄明白,于是决定写这篇博客,把这二者说的清清楚楚,,明明白白的。

先来些客套的,一个程序至少有一个进程,一个进程至少有一个线程线程的划分尺度小于进程,使得多线程程序的并发性很好进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序运行的效率线程在执行过程与进程还是有区别的,每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口,但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

    说完这些我以为讲的很清楚了,其实呢,跟没讲差不多。记得Mars老师说过,有人问他什么是http协议,他回答http协议是超文本传输协议,然后那人由问他,那什么是超文本协议,Mars老师顿时觉得刚才的回答貌似看着很正确,其实跟没回答没两样,如果别人知道什么是超文本协议,又怎么会问你http协议是什么呢?

接下来我们结合一个例子来具体理解一下:

一个系统运行着很多进程,可以比喻为一条马路上有很多马车,一条马路就是系统本身不同的进程可以理解为不同的马车,马车至少要一匹马来拉吧(这也就是我们上面提到的一个程序至少一个进程,一个进程只是有一个线程);那在这个例子里,什么是线程呢,当然是具体每一个马车对应的那些马了,一个马车可以有一匹或者多匹马来拉。那么我们考虑一个特殊情况,如果道路特别窄,窄到只能通过一辆马车,那么马就成为了分配资源的最小单位,一个马车的不同马匹之间也可以相互影响(也就是进程的划分要小于线程,并发性高)。如果在只能通过一辆马车的情况下,马车又只有一匹马来拉,这种情况就相当于一个程序只有一个进程,进程里又只包含了一个线程,其实在这种情况下线程跟进程并没有严格的界限。

    不知道说到这里大家有没有那么一点点的感觉,哪怕只有一点点!接下来我们具体看一下进程和线程的定义:

进程的概念:进程是表示资源分配的基本单位,又是调度运行的基本单位。操作系统会为它分配CPU以及其它有关资源(这是线程享受不了的待遇),该进程才真正运行。所以,进程是系统中的并发执行的单位。

    线程的概念:线程是进程中执行运算的最小单位,亦即执行处理机制调度的基本单位。如果把进程理解为在逻辑上操作系统锁完成的任务,那么线程表示完成该任务的许多可能的子任务之一。线程可以在处理器上独立调度执行,这样,在多处理环境下就允许几个线程各自在单独处理器上进行,操作系统提供线程就是为了方便而有效的实现这些并发性。

    引入线程的好处:

    1.易于调度

    2.提高并发性。通过线程可方便有效的实现并发性。进程可创建多个线程来执行同一程序的不同部分。

    3.开销少,创建线程比创建进程要快,锁需开销很少。

    4.利于充分发挥多处理器的功能。通过创建多线程进程(即一个进程可具有两个或更多个线程),每个线程在一个处理器上运行,从而实现应用程序的并发性,使得每个处理器都得到充分运行

    进程和线程的关系:

    1.一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程;

    2.资源分配给进程,同一进程的所有线程共享该进程的所有资源;

    3.处理机分给线程,即真正在处理机上运行的是线程(处理机:计算机系统中存储程序和数据,并按照程序规定的步骤执行指令的部件

    4.线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法是实现同步(也就是我们Android中每天面对的线程、handle和looper的关系)

    那么线程究竟跟进程的区别在哪:

    1.调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位

    2.并发性:不仅线程之间可以并发执行,同一个进程的多个线程之间也可以并发执行,所以说并发性高

    3.拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源


    说了这么多,不知道你们懂了没有,反正我是被绕晕了!其实我们并不用把二者想的太过于复杂,进程中肯定有线程,因为操作系统正真在执行的时候是对线程进行操作;操作系统给进程资源,线程确没有,线程只是可以共享它所在的进程的资源。

   看完我们应该马上忘掉这些乱七八糟的,自己静心想一下,其实很好理解的!难道你还没懂?

你可能感兴趣的:(线程与进程那些事)