Linux中进程与线程的概念以及区别

linux进程与线程的区别,早已成为IT界常常讨论但热度不减的话题。不管你是初级程序员,仍是资深专家,都应该考虑过这个问题,只是层次角度不一样罢了。对于通常的程序员,搞清楚两者的概念并在工做中学会运用是其思考的主要问题;对于资深工程师,如何在系统层面实现两种技术及其各自的性能和实现代价是其思考的主要问题。因而可知进程和线程在IT界的重要地位。linux

进程和线程是操做系统的基本概念,它们之间既有区别又有联系。从定义来看,它们比较抽象,很难理解。今天给你们打个比方,教你们用类比的方法去理解它,掌握它。其实,进程和线程的关系就比如是工厂车间和车间工人的关系,进程就像是一个工厂车间,线程就像是车间里的工人,每一个工厂车间有一个入口和出口,这就比如执行进程程序的主函数;每一个工厂车间都有本身的地址空间,这个空间里边能够包含不一样工种的工人,这就比如一个进程的地址空间,包含文本区域,数字区域,堆栈;一个工厂车间能够容纳1个或n车间工人,进程和线程是一对一或一对多的关系,一个进程至少包含一个线程;车间里的工人共享车间里的空间,这象征着一个进程的内存空间是共享的,每一个线程均可以使用共享内存;每一个车间能够供不一样的工人使用,但每一个车间的大小不一,容纳人数都有上限,好比说每一个厕所能够容纳1人,每一个厨房能够容纳n人,但车间里的每一个工人都有上厕所和吃饭的需求,那怎么解决这个问题呢?分批次进行!这就比如线程里的锁机制,当n个线程争夺同一资源时,就在这个资源上加把锁,当线程使用完毕,资源释放后才会供给后边的资源使用。有人可能会问,怎么肯定使用该资源的前后顺序呢?按照优先级的高低来肯定,优先级高的先使用,优先级低的后使用,同一级别按照先来后到的顺序使用。

经过这个故事我么能够看出,操做系统的设计能够概括为3点:程序员

  1. 以多进程形式,容许多个任务同时运行,也就是容许工厂里的多个车间同时工做;
  2. 以多线程形式,容许单个任务分红不一样的部分运行,也就是容许同一车间能够有不一样的工种完成不一样的任务;
  3. 提供协调机制,一方面防止进程和线程之间产生冲突,另外一方面进程和线程之间共享资源。

咱们大体对进程和线程有一个基本的概念以后,接下来再来看下进程和线程之间的区别:多线程

  1. 进程的执行过程是顺序执行的,虽然在执行过程当中可能发生中断或暂停,但该进程所拥有的资源只为该线状执行过程服务。就比如一次只能给一个车间供电的工厂,当一个车间A正在工做时,另一个更高级的车间B也要开启工做时,那么此时车间A就要断电,但车间A的一切设施和位置都不会发生变化,等车间B断电后,车间A继续工做。这是进程宏观上的线性执行过程。而线程的改变只是改变了CPU执行过程,而没有发生进程所拥有资源的变化。除了CPU以外,计算机内的软硬件资源的分配与线程无关,线程只能共享它所属进程的资源。这就比如一个车间里的工人,他们能够互换位置,但他们仍是在同一车间。
  2. 进程在执行过程当中与线程仍是有区别的。进程是执行中的程序,每一个独立的进程有一个程序运行的入口、顺序执行序列和程序的出口,这就是程序中的主函数。可是线程不可以独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。就比如每一个车间都有一个进口和出口,能够单独生产一件产品,但这依赖于车间里的工人协同工做才能完成。 
  3. 经过进程和线程的执行过程咱们能够看出,进程和线程是一对一或一对多的关系,一个进程至少包含一个线程,进程拥有一个完整的虚拟地址空间,它的空间大小是在设计它事就已经肯定的,不随工人的多少,体积大小而改变,也就是说,不依赖于线程而独立存在;反之,线程是进程的一部分,没有本身的地址空间,与进程内的其余线程一块儿共享分配给该进程的全部资源。

 

  1. 线程在不多作进程调度和切换的实时系统中能够有效地提升系统的执行效率,但并非在全部计算机系统中都是适用的。这就比如同一车间工人老是作同一种产品的产能要比常常切换车间,切换工种,作不一样产品的产能要高,由于他们更换车间,熟悉环境,熟悉生产流程都须要花时间。这也就是说线程的建立要比进程的建立开销要小的多。

 

  1. 从逻辑角度来看,多线程的意义在于一个应用程序中,他们能够实现应用程序的多个功能,但并不能实现一个完整的应用程序。就比如生产一个复杂的产品,每一个车间只是生产该产品一个或多个零部件,一个完成的产品仍是要靠整个工厂来完成。换言之,进程的调度和管理以及资源分配仍是要靠操做系统来完成,这就是进程和线程的重要区别。

好了,今天就先分享这么多,《Linux就该这么学》这本书写的真的很是好,条理清晰,用通俗的语言阐明难懂的知识点,在这里分享给你们,有兴趣的同窗能够去关注下啦!函数

相关文章
相关标签/搜索