进程和线程的区别

在接触计算机的软件时 , 我们常常会听到线程、进程这两个词 , 很多人知道它们两个是不同的 , 但却不知道它们到底有什么不一样 , 甚至还有人将两者混为一谈 , 这显然是非常错误的 , 下面小编就来给大家分享一下进程和线程的区别 。
进程和线程的区别
关于进程和线程的区别是有很多的 , 而简单的来说它们都是一个时间段的描述 , 也就是对CPU工作时间段的描述 , 其主要区别就在于进程是资源分配的最小单位 , 而线程是程序执行的最小单位 , 两者有着很紧密的联系 , 但也有很大的不同 , 具体不同之处如下:
1、进程是资源分配的最小单位 , 线程是程序执行的最小单位(资源调度的最小单位)
2、进程有自己的独立地址空间 , 每启动一个进程 , 系统就会为它分配地址空间 , 建立数据表来维护代码段、堆栈段和数据段 , 这种操作非常昂贵 。
而线程是共享进程中的数据的 , 使用相同的地址空间 , 因此CPU切换一个线程的花费远比进程要小很多 , 同时创建一个线程的开销也比进程要小很多 。
3、线程之间的通信更方便 , 同一进程下的线程共享全局变量、静态变量等数据 , 而进程之间的通信需要以通信的方式(IPC)进行 。不过如何处理好同步与互斥是编写多线程程序的难点 。
4、但是多进程程序更健壮 , 多线程程序只要有一个线程死掉 , 整个进程也死掉了 , 而一个进程死掉并不会对另外一个进程造成影响 , 因为进程有自己独立的地址空间 。
进程和线程的关系
1、一个进程可以有多个线程 , 但至少有一个线程;而一个线程只能在一个进程的地址空间内活动 。
2、资源分配给进程 , 同一个进程的所有线程共享该进程所有资源 。
3、CPU分配给线程 , 即真正在处理器运行的是线程 。
4、线程在执行过程中需要协作同步 , 不同进程的线程间要利用消息通信的办法实现同步 。
进程和线程的应用场景
使用多线程编程还是使用多进程编程 , 有一个简单的原则 , 如果能使用多线程实现的 , 就用多线程 , 不能使用多线程实现的 , 或者说 , 多线程会带来复杂度 , 那么使用多进程!
多线程有一个好处就是资源共享比较方便 , 如果还提供类似线程本地化的功能 , 那么多线程就算比较完美的了 。多进程我目前的使用场景是网络通信 , 分布式计算(虽然没用过)!
【进程和线程的区别】进程间如果想通信 , 能使用的方法有:管道 , 信号量 , 消息 , 事件(WIN) ,  socket等等 。

    推荐阅读