说起进程的同步和异步,应该从进程的阻塞和挂起
1.阻塞和挂起区别
1)挂起是一种主动行为,因此恢复也应该主动完成,而阻塞是一种杯中行为,是在等待时间或者资源任务时的表现,我们也不知道什么时候阻塞什么时候恢复阻塞,是透明的。
2)阻塞任务释放Cpu,其他任务可以获得cpu运行,而挂起不释放cpu,如果任务优先级高就永远轮不到其他任务,一般挂起用于程序调试中的条件中断。
3)任务调度是操作系统实现的,任务调度时,直接忽略挂起状态的任务,但会顾及处于阻塞状态下的任务,阻塞任务只要获得资源就会转为就绪状态,而挂起不行
4)挂起是主动的,一般用挂起函数操作,若不去激活,则一直处于挂起状态,而阻塞是因为资源被其他任务抢占而处于休眠状态,两者的表现方式都是从就绪状态里清掉,只不过实现方式不同。
2.同步和异步的区别
虽然整天听别人说同步异步,但是还是搞不清楚,什么是同步什么是异步。现在我们用通俗易懂的例子来说明同步和异步的差别。
1)在数据传输上,同步传输和异步传输:
同步传输:是以数据块为基本单位进行传输,发出数据后,等待接收方响应以后才发下一个数据包。
异步传输:是以字符为基本单位进行传输,不等待接收方响应,接着发下一个数据包的通讯方式。
2)在B/S架构中:
http协议:由于http本身是基于tcp连接的,而tcp链接要通过三次握手协议,每次请求,必须等待接受方回复,所以Http本身是同步的,没有异步的Http协议。通俗来将当我们通过一个连接访问网站的时候,浏览器什么也不干,就只是等着接受返回来的http响应,如果一直没有响应,那么就一直等待,知道返回渲染的页面或者请求失败信息。
Ajax:上述的同步方式,显然不利于用户的体验,所以出现了Ajax技术,ajax技术本身是一种异步通信,当浏览器发出请求信号后,无需一直等待接受整个http返回的信息,可以去做其他的事情。
但是从实质来说,异步是基于同步来实现的,像ajax技术,虽然浏览器不需要等待http返回的信息,可以去干其他事情,但是为什么当ajax返回的信息,浏览器能否接收到呢,这说明浏览器还是一直在等待返回的信息,实际上是浏览器设置了一个监听线程在不断的等待http响应,也就是说把原本有浏览器进程所做的事情交给了浏览器的某个线程去完成。
3.同步基本概念
当两个进程并发执行时,由于资源共享或者进程合作,使同处于一个系统中的进程之间可能存在以下两种形式的同步关系:
1)间接同步关系(间接制约):资源共享导致了这种同步关系的形成,比如A、B两个打印进程,同时共享打印设备,当A进程占用打印机打印的时候,B得不到打印机资源,则B处于阻塞状态,必须等A释放打印机资源,B才能将阻塞状态变为就绪状态。
2)直接同步关系(直接制约):进程合作导致这种同步关系的形成。比如A、B两个进程,B需要从缓冲区拿A进程的输出结果。A进程通过把输出结果输出到一个缓冲区,当缓冲区为空时,B进入阻塞状态,当A进程输出结果到缓冲区后,唤醒B进程,当缓冲区满时,A进程进入组则状态.
4.解决同步问题
利用互斥和信号量来解决同步问题。
互斥,当一个资源(临界资源)被一个进程访问时,其他进程如果想访问该资源,就必须等待。(比如一个单人卫生间,如果一个人进去使用了,门锁住,那么其他人想使用必须等待)。
信号量,其实就是一个变量,来描述共享资源的空间,来控制同步问题。(比如一个厕所有5间卫生间,当来一个人就singal-1,这是P操作申请空间,当厕所出去一个人singal+1,这是V操作释放空间,而且不可以同时操作信号量,而且singal最大值是5)当一个人来厕所,首先先申请空间,singal-1,如果singal>=0,则可以进去,如果singal<0那么必须等待,如果一个人要出去,singal=0,表示没有人,不可能出去。所以这样就保证了同步。
相关推荐
该实验旨在比较Unix系统中同步与异步`write`系统调用的效率差异。实验主要分为以下几个部分: 1. **实验目的**: - 学习和理解Unix中的文件I/O系统调用,特别是`write`函数的同步和异步模式。 - 分析不同缓冲区...
### 程序同步与异步的区别 #### 同步与异步的基本概念 在计算机科学领域中,同步(Synchronous)与异步(Asynchronous)是两种重要的通信模式,它们广泛应用于各种软件开发场景中,包括但不限于网络编程、多线程...
同步IO和异步IO的区别在于数据访问时进程是否被阻塞。同步IO在数据读写阶段必须阻塞,等待数据准备就绪;而异步IO在数据就绪之前并不阻塞,而是通过事件通知或回调函数来告知数据已经准备好了。 同步和异步只关注...
在深入学习这部分内容时,你需要理解TCP连接的生命周期、Socket API的使用、多线程或多进程模型在同步和异步编程中的应用,以及如何设计和实现高效的并发处理策略。同时,了解网络编程中的错误处理、异常处理和性能...
PROE 二次开发同步异步两种模式的区别 PROE 二次开发中,同步模式和异步模式是两种不同的开发方式。同步模式(Synchronous Mode)是指 PRO/Toolkit 应用程序进程和 PRO/ENGINEER 系统进程不能同时操作,需要等待...
在计算机科学中,进程线程通信、线程同步与异步以及进程间的通信是操作系统核心概念,对于理解和优化多任务并行处理至关重要。这些概念在软件开发,尤其是并发编程领域中占据着举足轻重的地位。 首先,让我们来探讨...
并发带来了异步性,有时需要进程同步解决异步问题 有的进程之间需要相互配合的完成工作,个进程的工作推进需要遵循一定的先后顺序 为完成某种任务而建立的两个或多个进程,这些进程因为需要在某些位置上协调他们...
在计算机编程领域,尤其是网络编程中,线程同步与异步套接字编程是至关重要的概念,它们直接影响到程序的性能、稳定性和可扩展性。本文将深入探讨这两个主题,并结合实际应用进行详细阐述。 首先,我们需要理解线程...
操作系统中的进程同步与通信是确保多进程环境下的正确运行和高效协作的重要机制。在操作系统引入进程后,由于进程的异步执行特性,可能导致程序执行的结果出现不确定性,这被称为不可再现性。为了解决这个问题,引入...
在深入探讨操作系统中进程同步与互斥实现的机制之前,首先需要对进程的概念和特性有一个明确的了解。进程是操作系统中一个非常重要的概念,它代表了一个具有独立功能的程序在一个数据集合上的一次执行。进程具有五大...
JAVA IO同步、异步详解 IO 操作是计算机系统中最基本的操作之一,它可以分为同步(Synchronous)和异步(Asynchronous)两种模式。同步IO 是指应用程序在执行IO 操作时,需要等待IO 操作完成后才能继续执行其他操作...
互斥量可以跨进程同步,但开销稍大;事件对象可以实现线程的等待和通知;信号量用于控制同时访问资源的线程数量;共享内存则用于不同进程间的通信。 在VC++中,我们可以使用`EnterCriticalSection`和`...
理解同步/异步与阻塞/非阻塞的区别后,我们可以进一步探讨这两种机制的组合应用。 1. **同步阻塞**:最常见的组合之一,适用于简单且对实时性要求不高的应用场景。例如,使用阻塞式的方法读取文件或数据库查询。 2...
根据给定的文章信息,本文将深入探讨C#在.NET平台上进行多线程程序设计的方法,特别是多线程同步与异步的实现。 ### C#多线程同步与异步的实现 #### 一、多线程概念 多线程是现代操作系统支持的一种并发处理方式...
在"同步异步套接字.e"这个源码文件中,可能包含了同步和异步套接字的实现细节,比如如何创建套接字,如何进行连接,如何发送和接收数据等。通常,它会使用特定的API来设置套接字为同步或异步模式,例如在POSIX系统中...
写了个类,用以调用其他exe,可以以同步或异步方式调用,可以设置超时时长,exe运行中产生的输出信息也可捕获到。 见:http://blog.csdn.net/beanjoy/article/details/9167767
在计算机系统中,进程同步是多任务环境中的一个重要概念,它涉及到多个进程之间的协调与通信,以确保系统资源的有效利用和程序的正确执行。在这个场景中,“司机和售票员问题”是一个经典的进程同步问题,旨在模拟...
通过这个项目,开发者可以深入理解同步与异步通信的区别,以及如何在VC++环境中实现这两种通信模式。代码中的注释和详细说明将有助于学习者逐步掌握这些概念,并能将它们应用到自己的项目中。同时,它也是一个很好的...
### 并发、多线程、同步异步概念解析 #### 一、并发与多线程 **并发**(Concurrency)是指多个任务看起来同时进行的一种现象。在计算机领域,特别是操作系统层面,它指的是一个时间段内有多个程序或任务都在运行...