消息传递机制(通讯)
一 同步和异步(线程)
在*中的释义是:在计算机编程中,异步,指的是独立于主程序流发生的事件,以及处理该事件的方式。这些可能是“外部”事件,例如信号的到达,或由程序发起的操作,该操作与程序同时/并发的执行,而程序不需要阻塞的等待结果。异步的输入(input)/输出(output)是导致异步的一个例子,让程序向存储或网络设备发出命令,而处理器继续执行程序。这样做提供了一定程度的并行性。
在一个编程接口中处理异步的一种常见方法是提供子程序(方法、函数),这些子程序(方法、函数)返回给它们的调用者一个对象,有时称为future或promise,用来表示正在进行的事件。这样的对象通常会伴随着一个同步操作,直到操作完成为止。一些编程语言,如Cilk,具有用于表示异步过程调用的特殊语法。
当您同步执行某个操作时,您需要等待它完成,然后再执行另一个任务。当您异步执行某个任务时,您可以在完成另一个任务之前继续执行
也就是说,在计算机上下文中,这意味着在另外一个“线程”上执行一个过程或任务。线程是作为工作单元存在的一系列命令(代码块)。操作系统可以管理多个线程,并在切换到另一个线程之前,为其分配一段处理器时间使它可以做一些工作。而在核心上(指的是CPU的核心),一个处理器可以简单地执行一个命令,它不需要同时做两件事。操作系统通过将时间片分配给不同的线程来模拟这个过程。
现在,如果您使用多个内核/处理器的话,那么事情实际上可能同时发生。操作系统可以将时间分配给第一个处理器上的一个线程,然后将同样的时间块分配给另一个处理器上的另一个线程。所有这些都是关于允许操作系统管理任务的完成,而您可以在代码中继续执行其他任务。
同步(单线程):
1 thread -> |<---A---->||<----B---------->||<------C----->|
同步(多线程):
thread A -> |<---A---->|
\
thread B ------------> ->|<----B---------->|
\
thread C ----------------------------------> ->|<------C----->|
异步 (单线程):
A-Start ------------------------------------------ A-End
| B-Start -----------------------------------------|--- B-End
| | C-Start ------------------- C-End | |
| | | | | |
V V V V V V
1 thread->|<-A-|<--B---|<-C-|-A-|-C-|--A--|-B-|--C-->|---A---->|--B-->|
- 比较难理解,可以理解为一个人边吃放边看电视,同时进行(个人观点)
异步 (多线程):
thread A -> |<---A---->|
thread B -----> |<----B---------->|
thread C ---------> |<------C--------->|
1.上图中的“|”标识的时间切片
2.“<” 和 “>”标识的是过程或者任务的开始于结束
二 同步传输/异步传输
1.异步传输
通常,异步传输是以字符为传输单位,每个字符都要附加 1 位起始位和 1 位停止位,以标记一个字符的开始和结束,并以此实现数据传输同步。所谓异步传输是指字符与字符(一个字符结束到下一个字符开始)之间的时间间隔是可变的,并不需要严格地限制它们的时间关系。起始位对应于二进制值 0,以低电平表示,占用 1 位宽度。停止位对应于二进制值 1,以高电平表示,占用 1~2 位宽度。一个字符占用 5~8位,具体取决于数据所采用的字符集。例如,电报码字符为 5 位、ASCII码字符为 7 位、汉字码则为8 位。此外,还要附加 1 位奇偶校验位,可以选择奇校验或偶校验方式对该字符实施简单的差错控制。发送端与接收端除了采用相同的数据格式(字符的位数、停止位的位数、有无校验位及校验方式等)外,还应当采用相同的传输速率。典型的速率有:9 600 b/s、19.2kb/s、56kb/s等。
异步传输又称为起止式异步通信方式,其优点是简单、可靠,适用于面向字符的、低速的异步通信场合。例如,计算机与Modem之间的通信就是采用这种方式。它的缺点是通信开销大,每传输一个字符都要额外附加2~3位,通信效率比较低。例如,在使用Modem上网时,普遍感觉速度很慢,除了传输速率低之外,与通信开销大、通信效率低也密切相关。
2. 同步传输
通常,同步传输是以数据块为传输单位。每个数据块的头部和尾部都要附加一个特殊的字符或比特序列,标记一个数据块的开始和结束,一般还要附加一个校验序列 (如16位或32位CRC校验码),以便对数据块进行差错控制。所谓同步传输是指数据块与数据块之间的时间间隔是固定的,必须严格地规定它们的时间关系。
三 阻塞 与非阻塞
阻塞与非阻塞可以理解为“等待状态”。
阻塞就是在调用结果返回之前,线程一直在等待结果。
非阻塞则是在不能立刻得到结果之前,线程不会一直等待结果。
还是以逛淘宝为例,在等待客服回复时,阻塞相当于你的精力一直放在与客服聊天的页面上,客服不回复爷爷就不走了。非阻塞就相当于你还是有一部分精力放在与客服聊天的页面上,不过同时你也可以干其他的事情(注意是可以,你也可以不干其他任何事,就坐在那里发呆)
阻塞与非阻塞与是否同步异步无关。就上面淘宝的例子——同步阻塞:等待客服的同时,不干任何事情,也就是说你坐在电脑面前发呆、浪费时间;同步非阻塞:先做一会儿其他的事情,再回头看客服有没有回复,没有的话再做一会儿其他的事情在回来看;异步阻塞:在客服回复之前,你明明可以离开聊天页面去干别的事情,但你丫非要等客服回复,相当于在异步等待。异步非阻塞:在客服回复之前,离开聊天页面去干别的事情,直到客服回复你才回去继续聊天。
从原理上讲异步也是可以有阻塞和非阻塞的,但实际上对异步讨论阻塞、非阻塞意义不大,一般阻塞和非阻塞是针对同步的。
四 消息是透传
1、透传:指与传输网络的介质、调制解调方式、传输方式、传输协议无关的一种数据传送方式。
这就好比快递邮件,邮件中间有可能通过自行车、汽车、火车、飞机的多种组合运输方式到达您的手上,但您不用关心它们中间经历了哪些。
2、为什么要透传呢?
透传一般都是用来读取远程的串口数据。例如:网吧内每个上网者都要刷身份证才能上网,但身份证数据库不可能放在每个网吧内。所以就将读卡器的串口数据通过透传回传到*局,在*局的平台上来比对身份证号码。
上一篇: Java消息传递机制