Karam
Articles71
Tags52
Categories15
进程和线程

进程和线程

进程和线程的概念

进程是当运行一个应用程序时,就会开启一个进程,进程是系统分配和调度资源的基本单位,进程是线程的容器,而进程是程序的实体。
线程是操作系统能够进行运算调度的最小单位,被包含在进程中,是进程中的实际运作单位,一个进程中可以并发多个线程,每条线程并行执行不同的任务

进程和线程的区别

  1. 性质不同:进程是系统分配和调度资源的基本单位,线程是分配的最小单位
  2. 归属不同:一个操作系统中可以有很多进程,一个进程中可以有很多线程
  3. 开销不同:进程创建,切换,销毁的开销比线程更大
  4. 拥有资源不同:进程之间互相独立,但是同一个进程下的线程有共享的资源
  5. 通信方式不同:进程之间可以通过管道,消息队列,共享内存,信号量以及Socket等实现通信,线程之间主要通过共享变量的方式实现通信
  6. 控制和影响能力不同:子进程无法控制父进程,子线程可以控制父线程

进程之间如何交互

1.管道

在内核中申请一块固定大小的缓冲区域,程序拥有写入和读取文件的权力

2.消息队列

存储在内核中的消息链表遵循队列先进先出的原则

3.共享内存

借助映射机制,不同进程的虚拟内存地址都映射到同一个物理地址,就可以相互读取和写入了

4.信号量

信号量其实就是一个整型的计数器,主要用于实现进程间的互斥和同步,而不是用于缓存进程间的通信数据。
  信号量表示资源的数量,控制信号量的方式有两种原子操作:

  • P操作:该操作会把信号量减去1。相减后如果信号量<0,表示该资源已被占用,进程需要被阻塞进行等待;相减后如果信号量>=0,表明资源还可被访问和使用,进程正常执行操作即可;
  • V操作:该操作会把信号量加上1。相加后信号量**>=0**,表明当前有被阻塞着的进程,将该进程唤醒运行;相加后如果信号量>0,表明当前没有被阻塞的进程;

  P操作用在进入共享资源之前,V操作用在离开共享资源之后,这两个操作必须成对出现。

5. Socket

首先客户端和服务端初始化Socket。

接着服务端调用bind绑定IP地址和端口,之后调用listen在这个IP和端口进行监听,然后调用accept等待客户端发起连接。

客户端调用connect向服务端端IP和端口发起连接请求,建立连接后在调用read和write分别读取和发送数据,完成客户端与服务端的数据传递

线程之间如何交互