C++多线程(1)——线程、进程

进程与线程

  • 并发:一个程序同时执行多个独立的任务。

    • 多个任务之间的切换(上下文切换)是要有时间开销的,比如操作系统要保存切换时的状态、执行进度等信息,切换回来后要复原这些信息。
    • 使用并发的原因主要是能够同时处理不同的任务,提高性能。
  • 可执行程序:磁盘上的一个文件,windows上以.exe为后缀名的文件。Linux上rwxrwxrwx中x代表执行权限。

  • 进程:就是一个可执行程序运行起来了,就创建了一个进程。进程是对运行时程序的封装,是系统进行资源调度和分配的的基本单位,实现了操作系统的并发。

  • 线程:每个进程都有一个主线程,当进程被创建后,主线程就会自动启动。运行一个程序的时候,实际上是主线程在运行main()中的代码。线程可以理解成一条代码的执行通路。线程是进程中执行运算的最小单位。多线程就是允许一个进程中在同一时刻执行多个任务。

区别

  • 一个线程只能属于一个进程,但是一个进程可以拥有多个线程。

  • 进程是资源分配的最小单位,线程是CPU调度的最小单位。

  • 进程在执行过程中拥有独立的内存单元,而多个线程共享进程的内存。

  • 一个进程崩溃,不会对其他进程产生影响;而一个线程崩溃,会让同一进程内的其他线程也死掉。

  • 进程在创建、切换和销毁时开销比较大,而线程比较小。在创建或撤消进程时,系统都要为之分配或回收资源,如内存空间、I/O设备等。在进行进程切换时,涉及到整个当前进程CPU环境的保存以及新被调度运行的进程的CPU环境的设置。而线程切换只须保存和设置少量寄存器的内容,并不涉及存储器管理方面的操作。

  • 进程间通信比较复杂,而同一进程的线程由于共享代码段和数据段,所以通信比较容易。

进程间通信方式

  • 两个进程在同一台电脑上:管道、文件、消息队列、共享内存
  • 两个进程在不同电脑上:socket通信技术

线程间通信方式

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

猜你喜欢

转载自blog.csdn.net/qq_34731182/article/details/113460553
今日推荐