线程与进程的关联
上篇博客 我们说了进程
下面我来用一个我们回忆一下
其实啊 进程在频繁的创建 / 销毁的时候 是非常低效的
-因为创建的时候 要给进程分配资源(内存/文件) 赋值到CPU上 是一个大活
所以 有了线程
那咱们已经很了解进程了 直接说 线程 与 进程 的区别:
对比 | 进程 | 线程 |
1 | 包含线程 | |
2 | 更轻量,创建更快,销毁的也更快 | |
3 | 进程与进程之间 则是独立的 内存/文件 资源 | 同一个进程的多个线程之间 共用一份 内存/文件 资源 |
4 | 资源分配的基本单位 | 调度执行的基本单位 |
解释一下:
1. 进程包含线程-一个进程至少有一个线程 也可以有多个线程
2&3. 2的原因是因为3 共用一份资源 所以避免了上述 创建进程所带来的低效的原因
在展开说说:
多个线程是 '并发'执行的('并行'+'并发')
但是 操作系统在调度线程的时候 是不确定的--"抢占式执行"
比如下述代码 与 结果 你可以看到 产生的结果不具有什么规律性
class MyThread extends Thread{
@Override
public void run() {
while(true){
System.out.println("thread");
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class Text {
public static void main(String[] args) {
MyThread myThread = new MyThread();
myThread.start();
while(true){
System.out.println("main");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
所以 线程也有很多的缺点:
1.不如上述的 "抢占式执行" 就给多线程的执行 带来的很多的不确定因素
2.计算量小的话,创建多线程 也许速度反而更慢了
...