进程与线程
进程与线程
- 进程就是用来加载指令,管理内存,管理IO的,当一个程序运行,从磁盘加载这个程序到内存,就开启了一个进程
- 一个进程能分为多个线程,一个线程就是一个指令流,将指令流中过的指令一条条以一定的顺序交给CPU执行
- 线程是最小的调度单位,进程是资源分配的最小单位,windows中进程不是活动的,只是作为线程的容器
- 对比
- 进程基本都相互独立,而线程在进程内,是进程的子集
- 进程拥有共享的资源,如内存空间,供其内部的线程共享
- 进程间的通信较为哦复杂
- 同一台计算机的进程通信称作IPC
- 不同计算机之间的线程通信需要通过网络,遵守共同协议,如HTTP
- 线程通信较为简单,共享进程内存的线程,多个内存可以访问一个共享变量
- 线程更轻量,上下文切换成本比进程要低
- CPU任务调度器:调度不同线程
并行与并发
- 单核CPU下,串行执行,cpu把不同的时间片分给不同线程,轮流执行,叫做并发:concurrent
- 多核CPU,不同的核心同时执行不同线程,叫做并行:parallel
- 大部分情况下既有并发又有并行
异步调用
- 同步:方法调用需要等待返回才能继续运行,叫做同步
- 不用等待叫做异步
- 多线程开发才能变成异步
- 处理比较耗时的任务的时候用异步
- tomcat的异步servlet,让用户线程处理耗时较长的操作,解放工作线程
- 多线程可以利用多核CPU的优势,提高效率
- linux是单核CPU
- IO操作不占用CPU,但是一般拷贝文件使用的是阻塞IO,需要等待IO结束,没有充分利用线程
- 需要非阻塞IO和异步IO提高线程利用率
java线程
TThread t = new Thread(){
public void run(){
}
};
t.setName("t1");
t.start();
Runnable task = new Runnable(){
public void run(){
}
};
Thread t = new Thread(task);
t.setName("t1");