(一)两者的定义
进程:进程是一个具有独立功能的程序关于某个数据集合的一次运行活动,它是操作系统动态执行的基本单元。没有运行的程序不能算是一个进程。
线程:线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。每个进程至少有一个线程。
(二)两者的区别
(1)进程享有自己的独立内存和资源,线程共享所在进程(主线程)的资源。
(2)创建进程所需要消耗的时间要大于线程,且进程消耗的系统资源更多。
(3)进程间的通信需要借助其他工具(例如管道、消息队列、共享内存等),线程间由于共享资源可以直接通信。
(4)操作系统通过调度切换进程或线程来实现高并发,进程之间的切换时间要远大于线程,这也是导致多线程被提出的原因。
(5)在多线程中一个线程死掉会导致该进程下所有的线程都死掉,而进程不会,因此进程比线程要健壮很多。
(6)多线程由于共享资源,因此在执行过程中可能出现多个线程同时处理某一资源,导致获得的结果错误,因此在多线程中经常需要引入锁机制,多进程一般不需要加锁。
总结:
线程由于创建速度、切换速度快,且不占据太多的系统资源,因此在执行高并发的 I/O 操作具有较大的优势,但是线程的数量不宜太多,当线程太多时,大量的时间被用在了线程间的切换上。但是在计算密集型上一般采用多进程(进程的数量最好和计算机的核心数相等)来执行,因为计算密集型很消耗CPU,为保证CUP的充分利用,要尽量减少CPU做其他的工作(比如调度进程和线程)。