第1章 进程线程及其多线程
进程与线程
1. 进程: https://baike.baidu.com/item/%E8%BF%9B%E7%A8%8B/382503
2. 线程: https://baike.baidu.com/item/%E7%BA%BF%E7%A8%8B/103101
知乎上有一个很好的比喻,如下所示:做个简单的比喻:进程=火车,线程=车厢
1. 线程在进程下行进(单纯的车厢无法运行)
2. 一个进程可以包含多个线程(一辆火车可以有多个车厢)
3. 不同进程间数据很难共享(一辆火车上的乘客很难换到另外一辆火车,比如站点换乘)
4. 同一进程下不同线程间数据很易共享(A车厢换到B车厢很容易)
5. 进程要比线程消耗更多的计算机资源(采用多列火车相比多个车厢更耗资源)
6. 进程间不会相互影响,一个线程挂掉将导致整个进程挂掉(一列火车不会影响到另外一列火车,但是如果一列火车上中间的一节车厢着火了,将影响到所有车厢)
7. 进程可以拓展到多机,进程最多适合多核(不同火车可以开在多个轨道上,同一火车的车厢不能在行进的不同的轨道上)
8. 进程使用的内存地址可以上锁,即一个线程使用某些共享内存时,其他线程必须等它结束,才能使用这一块内存。(比如火车上的洗手间)-"互斥锁"
9. 进程使用的内存地址可以限定使用量(比如火车上的餐厅,最多只允许多少人进入,如果满了需要在门口等,等有人出来了才能进去)-“信号量”
链接:https://www.zhihu.com/question/25532384/answer/411179772
来源:知乎
为什么需要多线程?
1. 火车跑起来很快,但是卸货装货比较慢,如果每辆火车依次 装货、运输、卸货,利用率很低。可以将 运输看作 CPU 运算,装货卸货看作其他设备运算,很明显,如果火车专门等装卸货完成,那么利用率贼低,让每个火车(线程)准备好,铁轨(CPU)让每辆可以执行的线程(火车)依次快速执行。
2. 对于现有计算机而言,磁盘 I/O 等其他硬件设备往往跟不上 CPU 的运行速度,CPU 得不到充分的利用,于是但是了多线程并发执行这种概念。
3. 把一个进程划分为多个线程,每个线程轮流占用 CPU 的运算时间,操作系统不断地把线程挂起、唤醒、再挂起、再唤程,如此反复。多线程 针对的是 CPU。
Java 多线程
1. Java 语言内置了多线程支持:一个 Java 程序实际上是一个 JVM 进程,JVM 进程用一个主线程来执行 main() 方法,在 main() 方法内部,我们又可以启动多个线程。此外,JVM 还有负责垃圾回收的其他工作线程等。
2. 因此,对于大多数 Java 程序来说,我们说多任务,实际上是说如何使用多线程实现多任务。和单线程相比,多线程编程的特点在于:多线程经常需要读写共享数据,并且需要同步。例如,播放电影时,就必须由一个线程播放视频,另一个线程播放音频,两个线程需要协调运行,否则画面和声音就不同步。因此,多线程编程的复杂度高,调试更困难。
3. Java多线程编程的特点又在于:
多线程模型是 Java 程序最基本的并发模型;
读写网络、数据库、Web开发等都依赖 Java 多线程模型。
浙公网安备 33010602011771号