进程和线程区别以及通信方式

什么是进程

进程有一个相当精简的解释:进程是对操作系统上正在运行程序的一个抽象。
通俗理解:进程是程序的一次执行,线程可以理解为进程中的执行的一段程序片段。

为什么要有线程

每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器,线程之间切换的开销小。所以线程的创建、销毁、调度性能远远优于进程。

进程和线程的区别

1、进程是程序的一次执行,线程可以理解为进程中的执行的一段程序片段。
2、进程是资源分配的基本单位,线程是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。
3、进程有自己独立的地址空间,每启动一个进程,系统都会为其分配地址空间。资源分配给进程,同一进程的所有线程共享该进程的所有资源。同一进程中的多个线程共享代码段(代码和常量),数据段(全局变量和静态变量),扩展段(堆存储)。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),有自己的栈空间,用来存放局部变量和临时变量。
4、创建一个线程比进程开销小,CPU切换一个线程比切换进程花费小。
5、不同进程间不会相互影响 ;进程的一个线程挂掉将导致整个进程挂掉。
6、二者都可并发执行

进程间通信

因为进程有自己独立的地址空间,所以不同进程的信息难以共享,必须采用一些进程间通信方式,进行信息交换。
线程很好地解决这个问题,线程间可以直接读写进程数据段(如全局变量)来进行通信——需要进程同步和互斥手段的辅助,以保证数据的一致性。

进程间通信主要包括管道、系统IPC(包括消息队列、信号量、信号、共享内存等)、以及套接字socket

socket也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同主机之间的进程通信。

线程间通信

临界区:通过多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问;
互斥量Synchronized/Lock:采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限。因为互斥对象只有一个,所以可以保证公共资源不会被多个线程同时访问
信号量Semphare:为控制具有有限数量的用户资源而设计的,它允许多个线程在同一时刻去访问同一个资源,但一般需要限制同一时刻访问此资源的最大线程数目。
事件(信号),Wait/Notify:通过通知操作的方式来保持多线程同步,还可以方便的实现多线程优先级的比较操作进

[1] https://www.eet-china.com/mp/a92885.html
[2] https://cloud.tencent.com/developer/article/1688297
[3] http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html
[4] https://developer.aliyun.com/article/237026
[5] https://www.zhihu.com/question/25532384

你可能感兴趣的:(进程和线程区别以及通信方式)