进程与线程的关系

Posted  林先生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进程与线程的关系相关的知识,希望对你有一定的参考价值。

一、 进程

        进程(Process)是程序的一次动态执行过程,它对应了从代码加载、执行至执行完毕的一个完成过程,这个过程也是进程本身从产生、发展至消亡的过程。
       操作系统同时管理一个计算机系统中的多个进程,让计算机系统中的多个进程轮流使用CPU资源,或者共享操作系统的其它资源。
       进程有如下特点
               进程是系统运行程序的基本单位。
               每一个进程都有自己独立的一块内存空间、一组系统资源。
               每一个进程的内部数据和状态都是完全独立的。

二、 线程
 

        1.线程是进程中执行运算的最小单位,一个进程在其执行过程中可以产生多个线程,而线程必须在某个进程内执行。线程是进程内部的一个执行单元,是可完成一个独立任务的顺序控制流程,如果在一个进程中同时运行了多个线程,用来完成不同的工作,则称之为多线程。
        2.线程和进程既有联系又有区别:
                一个进程中至少要有一个线程
               资源分配给进程,同一进程的所有线程共享该进程的所有资源。
                处理机分配给线程,即真正在处理机上运行的是线程。

        3. 多线程的优势
        多线程程序可以带来更好的用户体验,避免因程序执行过慢而导致计算机出现计算机死机或者白屏的情况。
        多线程程序可以最大限度地提高计算机系统的利用效率。如迅雷的多线程下载。

JVM线程与Linux内核线程的映射(关系)

参考技术A

Linux从内核2.6开始使用NPTL(Native POSIX Thread Library)支持,但这时线程本质上还轻量级进程。 Native POSIX Thread Library(NPTL)是Linux内核中实践POSIX Threads标准的库。POSIX线程(英语:POSIX Threads,常被缩写为Pthreads)是POSIX的线程标准,定义了创建和操纵线程的一套API。实现POSIX 线程标准的库常被称作Pthreads

Pthreads定义了一套C语言的类型、函数与常量,它以pthread.h头文件和一个线程库实现。

Pthreads API中大致共有100个函数调用,全都以"pthread_"开头,并可以分为四类:

线程管理,例如创建线程,等待(join)线程,查询线程状态等。
互斥锁(Mutex):创建、摧毁、锁定、解锁、设置属性等操作
条件变量(Condition Variable):创建、摧毁、等待、通知、设置与查询属性等操作
使用了互斥锁的线程间的同步管理

Java里的线程是由JVM来管理的,它如何对应到操作系统的线程是由JVM的实现来确定的。Linux 2.6上的HotSpot使用了NPTL机制, JVM线程跟内核轻量级进程有一一对应的关系 。线程的调度完全交给了操作系统内核,当然jvm还保留一些策略足以影响到其内部的线程调度,举个例子,在linux下,只要一个Thread.run就会调用一个fork产生一个线程。

Java线程在Windows及Linux平台上的实现方式,现在看来,是内核线程的实现方式。这种方式实现的线程,是直接由操作系统内核支持的——由内核完成线程切换,内核通过操纵调度器(Thread Scheduler)实现线程调度,并将线程任务反映到各个处理器上。内核线程是内核的一个分身。程序一般不直接使用该内核线程,而是使用其高级接口,即轻量级进程

创建用户级线程

以上是关于进程与线程的关系的主要内容,如果未能解决你的问题,请参考以下文章

Java面试18|关于进程线程与协程

Java线程与Linux内核线程的映射关系(转)

20175310 《Java程序设计》第10周学习总结

JVM线程与Linux内核线程的映射(关系)

,关于线程的start方法执行

Java线程与Linux内核线程的映射关系