一、概念
进程:系统资源分配的基本单位,又是调度运行的基本单位。
例如,用户运行了一个程序,系统就为该程序创建一个进程,并为它分配资源,包括各种表格、内存空间、磁盘空间、I/O设备等。然后,该进程放入进程的就绪队列,进程调度程序选中它,并为它分配CPU以及其它资源,该进程才真正运行,所以,进程是系统系统中并发执行的单位。
在Mac、Windows NT采用微内核结构的操作系统中,进程的功能发生了变化,它只是资源分配的单位,而不再是调度运行的单位,在微内核系统中真正调度运行的基本单位是线程,因此,实现并发功能的是线程。
线程:线程是进程中执行运算的最小单位(亦即执行处理器调度的基本单位),线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的方法(函数)。
如果把进程理解为在逻辑上操作系统所完成的任务,那么线程表示完成该任务的许多可能的子任务之一。
例如,假设用户启动了一个窗口中的数据库应用程序,操作系统将对数据库的调用表示为一个进程。
假设用户要从数据库中产生一份工资单报表,并传到一个文件中,这是一个子任务;在产生工资单报表的过程中,用户又可以输入数据库查询请求,这又是一个子任务。这样,系统则把每一个请求——工资单报表和新输入的数据库查询,表示为数据库进程中的独立线程。
线程可以在处理器上独立调度执行,这样在多处理器环境下,就允许几个线程各自在单独的处理器上运行。操作系统提供线程就是为了方便而有效的实现这种并发性。
多线程:多线程是指程序中包含多个执行流。即在一个程序中可以运行多个不同的线程来执行多个不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。
二、内存
每一个进程都从一个主线程开始执行,但可以在它拥有的线程中创建额外的线程。
一个进程的所有线程共享进程的虚拟地址空间和系统资源,一个线程的资源包括线程的机器寄存器设置,内核堆栈,线程环境变量和进程虚拟地址中的用户堆栈。
三、引入线程的好处
- 易于调度
- 提供并发性。通过线程可以方便有效的实现并发。进程可创建多个线程来执行同一程序的不同部分。
- 开销少。创建线程比创建进程要快,所以开销很少。
- 利于充分发挥多处理器的功能。通过创建多线程进程(即一个进程可以具有两个或更多个线程),每个线程在一个处理器上运行,从而实现应用程序的并发性,使每个处理器都得到充分利用。
四、进程与线程的关系
- 一个程序至少有一个进程;一个进程可以多个线程,但至少要有一个线程;一个线程只能属于一个进程。
- 资源分配给进程,同一个进程中的所有线程共享该进程的所有资源。
- 处理器分配给线程,即真正在处理器上运行的是线程
- 线程在执行过程中,要求协作同步。不同进程的线程间,要利用消息通讯的办法实现同步。
五、多线程的优劣
优点:可以提高CUP的利用率。在多线程的程序中,一个线程必须等待的时候,CPU可以运行其它的线程而不是等待,这样大大提高了程序的执行效率,同时也提高了系统资源的利用率。
缺点:
- 线程也是程序,所以线程需要占用内存,线程越多占用内存也越多;
- 多线程需要协调和管理,所以需要CPU时间跟踪线程;
- 线程之间对共享资源的访问会相互影响,必须解决公用共享资源的问题;
- 线程太多会导致控制太复杂,最终可能造成很多bug;
注:本文源自互联网,经过查阅网上资料整理而成,如涉及到他人整理的成果,在此表示感谢。由于涉及到的参考文章比较多,在此就不再一一列举。
本文是目前个人理解的结果,仅供参考,如后续发现问题,本人会进行相应的更正,也欢迎各位对Java线程感兴趣的朋友或者前辈进行指正。
本文深入探讨了Java线程的概念、内存管理机制,以及多线程带来的优势与潜在问题。阐述了进程与线程的关系,详细解释了线程如何共享进程资源,以及在多处理器环境下的并发执行方式。同时,分析了多线程的优点和缺点,如提高CPU利用率、减少开销等,以及如何有效避免线程间的同步问题。
272

被折叠的 条评论
为什么被折叠?



