文章目录
- 8.1 进程与线程的基本概念
- 概念总结
- 单核CPU和多核CPU
- 并行与并发
- 多线程优点
- 多线程使用时机
8.1 进程与线程的基本概念
进程与线程均属于计算机操作系统的概念,是程序运行的基本单元。Java 提供了一套线程类库,从编程角度实现线程,内容涉及如何创建线程、线程的编程方式、并发等。Java 并不是唯一提供线程处理的语言,UNIX/Linux环境下POSIX标准的Pthread 类库也是一套基于C语言的多线程类库,此外,C++ 的Boost标准库也提供了线程的处理方法。Java 多线程的学习,重点在于多线程程序的设计方法,以及Java API提供的相关线程方法。
进程是一个可运行的程序,启动一个程序就启动了一个进程。打开一个Word编辑文档,就执行一个进程;如果再打开QQ开始上网聊天,另一个进程又执行;当运行自己编写的Java应用程序时,也在执行一个进程。操作系统有若干进程在运行,操作系统周期性地将CPU切换到不同的任务,分时间片轮流运行每-一个进程,这样看起来每一个进程都像是连续运行的。
一个进程内可以启动多个线程,线程也称为轻量级进程( light- weight process)。下图为进程与线程的关系,一个进程中多段代码同时运行。一个进程的若干任务可以细分为多个部分由多线程来处理,如上网下载某个游戏、歌曲,由多个线程同时下载,速度可大大增强,整个程序的吞吐量也增强,加快反应时间。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T6AM7X79-1630246479645)(C:\Users\26969\AppData\Roaming\Typora\typora-user-images\image-20210829163901131.png)] java中的线程跟操作系统本身的线程有什么区别 操作系统线程和java线程_Java](https://s2.51cto.com/images/blog/202311/07025510_6549368eb134d40468.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
每个进程各自占有一份独立的内存空间,必须使用操作系统提供的复杂机制(如管道、消息队列、共享内存、信号量(semaphore)进行通信和传递信息,编程比较复杂。而一个进程内的多个线程属于同一个进程,它们可以共享内存空间,同时创建线程比创建进程开销要小得多,线程之间的协作和数据交换也比较容易,因此,多线程之间的操作比多进程简单得多,而且编程简单,效率高。多个线程共同处于一个内存空间的优势在于能直接共享数据和资源。
当然,并非多线程就绝对比多进程有优势,多线程共享内存资源,一旦其中一个线程破坏了内存,就会影响到其他线程的执行,而且多个线程属于一个进程,只能在一个主机上执行,需要跨网络的程序还是应该使用进程
概念总结
- 程序(program)是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象。
- 进程(process)是程序的一次执行过程,或是正在运行的一个程序。是一个动态的过程:有它自身的产生、存在和消亡的过程。——生命周期
进程作为资源分配的单位,系统在运行时会为每个进程分配不同的内存区域- 线程(thread),进程可进一步细化为线程,是一个程序内部的一条执行路径。
线程作为调度和执行的单位,每个线程拥有独立的运行栈和程序计数器(pc),线程切换的开销小。一个进程中的线程共享方法区和堆。
单核CPU和多核CPU
单核CPU,其实是一种假的多线程,因为在一个时间单元内,也只能执行一个线程的任务但是因为CPU时 间单元特别短,因此感觉不出来。
如果是多核的话,才能更好的发挥多线程的效率。(现在的服务器都是多核的)
一个Java应用程序java.exe,其实至少有三个线程:main()主线程,gc() 垃圾回收线程,异常处理线程。当然如果发生异常,会影响主线程。
并行与并发
并行:多个CPU同时执行多个任务。比如:多个人同时做不同的事。
并发:一个CPU(采用时间片)同时执行多个任务。比如:秒杀、多个人做同一件事
多线程优点
- 提高应用程序的响应。对图形化界面更有意义,可增强用户体验。
- 提高计算机系统CPU的利用率
- 改善程序结构。将既长又复杂的进程分为多个线程,独立运行,利于理解和修改
多线程使用时机
- 程序需要同时执行两个或多个任务。
- 程序需要实现一些需要等待的任务时,如用户输入、文件读写操作、网络操作、搜索等。
- 需要一些后台运行的程序时。
















