线程与进程、同步和异步、阻塞和非阻塞

C++并发编程实战第二版

转载:多线程和多进程的区别

转载:怎样理解阻塞非阻塞与同步异步的区别?

同步和阻塞?异步和非阻塞?

并发、并行、同步、异步、多线程的区别?

异步:future promise
并发:thread mutex atomic

一、并发

同一时间段有几个程序都处于已经启动到运行完毕之间,并且这几个程序都在同一个处理机上运行,并发的两种关系是同步和互斥;

二、互斥

进程之间访问临界资源时相互排斥的现象;

三、同步

进程之间存在依赖关系,一个进程结束的输出作为另一个进程的输入。具有同步关系的一组并发进程之间发送的信息称为消息或者事件;

四、并行

单处理器中进程被交替执行,表现出一种并发的外部特征;在多处理器中,进程可以交替执行,还能重叠执行,实现并行处理,并行就是同时发生的多个并发事件,具有并发的含义,但并发不一定是并行,也就是说事件之间不一定要同一时刻发生;

五、多线程

多线程是进程中并发运行的一段代码,能够实现线程之间的切换执行;多线程并不一定是并行的,只有在多核处理器上才能实现并行,单核处理器上只是并发。

六、异步

和同步相对,同步是顺序执行,而异步是彼此独立,在等待某个事件的过程中继续做自己的事,不要等待这一事件完成后再工作。线程是实现异步的一个方式,异步是让调用方法的主线程不需要同步等待另一个线程的完成,从而让主线程干其他事情。

七、异步和多线程

不是同等关系,异步是目的,多线程只是实现异步的一个手段,实现异步可以采用多线程技术或者交给其他进程来处理。

八、死锁

多线程编程时要考虑多个线程同时访问共享资源所造成的问题,因此可以通过加锁解锁来保证同一时刻只有一个线程能访问共享资源;使用锁的时候要注意,不能出现死锁的状况;死锁就是多个线程争夺共享资源导致每个线程都不能取得自己所需的全部资源,从而程序无法向下执行

产生死锁的四个必要条件(面试考点):

  • 互斥(资源同一时刻只能被一个进程使用)

  • 请求并保持(进程在请资源时,不释放自己已经占有的资源)

  • 不剥夺(进程已经获得的资源,在进程使用完前,不能强制剥夺)

  • 循环等待(进程间形成环状的资源循环等待关系)

死锁预防

破坏死锁产生的四个条件(完全杜绝死锁)

死锁避免

对分配资源做安全性检查,确保不会产生循环等待(银行家算法)

死锁检测

允许死锁的发生,但提供检测方法

死锁解除

已经产生了死锁,强制剥夺资源或者撤销进程

原文地址:https://www.cnblogs.com/mmmmmmmmm/p/14749928.html