资源分配
进程:进程是系统进行资源分配的基本单位,每个进程拥有自己独立的内存空间和系统资源
线程:线程是系统进行任务调度的基本单位,线程是进程的一部分,一个进程可以包含多个线程,这些线程可以共享父线程的内存空间和资源
并发与并行
进程:多个进程可以在同一时间内并发执行,但实际上他们可能并不是真正的并发执行,而是在交替执行
线程:在多核处理器上,线程可以实现真正的并行执行,因为可能不同进程的多个线程或者是同一个进程的不同线程,他们可以同时在不同的CPU核心上运行
创建与销毁
进程:当我们启动一个Java程序的时候,进程就自动被创建好了,当然创建和销毁进程的代价较高,因为我们还需要分配和回收资源
线程:创建线程我们最常用的两种方法就是继承Thread类和实现Runnable接口,同时呢创建和销毁的代价也比较小,因为我们是复用进程的资源,此时如果进程被销毁那么该进程的所有线程也都会被销毁
独立性
进程:进程是相对独立的执行环境,一个进程的执行不会直接影响到另一个进程。即使一个进程崩溃或者退出,也不会对其他进程产生影响(除非他们之间有资源共享或者是父子关系)
线程:线程是进程的一部分,一个线程的执行可能会影响到另一个线程
通信方式
进程:进程之间的通信需要显示的机制,如管道,消息队列,共享内存等来实现
线程:线程共享进程的地址空间和资源,因此线程之间的通信更加方便快捷,它们可以直接读写进程共享的数据,无需额外的通信机制,但是这也需要我们时刻关注,避免产生死锁和避免竞态条件等问题