Linux--进程与线程总结

1. 进程

  1. 进程是拥有资源的独立单位(不管系统中是否有线程);
  2. 程序是静态的,不涉及进程,进程是程序运行时的实体;
  3. 互斥锁就是标记资源访问状态的一个计数器;为1表示当前没有进程访问临界资源,临界资源处于可访问状态;
  4. 在一段时间内,只允许一个进程访问的资源被称为临界资源;
  5. 进程间通信:管道、套接字、共享内存、消息队列;
  6. 进程之间具有独立性,拥有自己的虚拟地址空间,因此无法通过各自的虚拟地址进行通信;
  7. 进程间通信是通过内核中的缓冲区、文件以及网络通信实现的。

进程间同步的方式

  1. 因为使用互斥不仅仅能够在同一应用程序不同线程中实现资源的安全共享,而且可以在不同应用程序的线程之间实现对资源的安全共享;
  2. 任意时刻只允许一个线程对共享资源进行访问。如果有多个线程试图同时访问临界区,那么 在有一个线程进入后其他所有试图访问此临界区的线程将被挂起,并一直持续到进入临界区的线程离开;
  3. 信号允许多个线程同时使用共享资源;
  4. 如果只为了在进程内部是用的话使用临界区会带来速度上的优势并能够减少资源占用量。

2. 线程

  1. 在Linux系统中,线程是处理器调度的基本单位;
  2. 操作系统的最小调度单位是线程
  3. 线程自己不拥有系统资源;
  4. 每个线程在进程虚拟地址空间中拥有独立的栈空间;
  5. 线程独有:栈,寄存器,信号屏蔽字,errno…等信息, pthread_self用于获取用户态线程的tid,getpid用于获取当前进程的id。

3. 进程与线程

  1. 线程和进程都可并发执行;
  2. 进程是资源分配的基本单位,线程是调度的基本单位;
  3. 进程——资源分配的最小单位,线程——程序执行的最小单位;
  4. 进程有独立的地址空间,线程没有单独的地址空间(同一进程内的线程共享进程的地址空间);
  5. 线程的粒度小于进程,通常多线程比多进程并发性更高;
  6. 进程是程序的一次执行,而线程可以理解为程序中运行的一个片段;
  7. 线程之间的通信简单(共享内存即可,但须注意互斥访问的问题),而不同进程之间的通信更为复杂,通常需要调用内核实现;;
  8. 进程是程序的一次执行,而线程可以理解为程序中运行的一个片段;
  9. 进程比线程安全的原因是每个进程由独立的虚拟地址空间,具有独立性。

4. 多线程与多进程

  1. 多进程之间的数据共享比多线程编程复杂;
  2. 多线程的创建,切换,销毁速度快于多进程;
  3. 多线程没有内存隔离,单个线程崩溃会导致整个应用程序的退出;
  4. 大量的计算使用多进程和多线程都可以实现并行/并发处理,而多线程的资源消耗小于多进程;
  5. 多进程里,子进程可获得父进程的所有堆和栈的数据;而线程会与同进程的其他线程共享数据,拥有自己的栈空间。
版权声明:玥玥 发表于 2021-04-29 1:44:53。
转载请注明:Linux--进程与线程总结 | 女黑客导航