异步机制

Linux 内核中使用到异步机制的地方:
  信号,这是一种进程间通信的异步机制 【通信】
  epoll,这是一种高效I/O的异步通信机制 【I/O】

信号的本质:
  软中断信号(signal,又简称为信号),用来通知进程发生了异步事件。
在软件层次上,信号是对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。
信号是进程通信机制中唯一的异步通信机制。(一个进程不必通过任何操作来等待信号的到达,进程也不知道信号到底什么时候到达)

进程收到信号后,有3种处理方法:
  1. 类似中断的处理程序。对于需要处理的信号,进程可以指定处理函数,由该函数去处理。
  2. 忽略来的信号
  3. 对所来信号保留系统的默认值(对大部分信号的缺省操作是让进程终止)

信号的种类:

  1. 可靠信号与不可靠信号

  2. 实时信号与非实时信号

不可靠信号:信号值小于SIGRTMIN的信号都是不可靠信号,不可靠 ---- 这些信号有可能丢失

可靠信号:由于上面的信号不可靠,所以对其进行改进和扩充,引入可靠信号,将信号值位于SIGRTMINSIGRTMAX之间信号定义为可靠信号(这些信号,支持排队,不会丢失)

早期Unix系统只定义了32种信号(这32种信号都有确定的用途和含义,并且每种信号都有各自默认的缺省操作,比如:按键盘的ctrl+c,会产生SIGINT信号,默认的缺省操作就是将 进程终止),这32种信号是非实时信号(非实时信号都不支持排队,都是不可靠信号),后32种信号是实时信号(实时信号都支持排队,都是可靠信号)

信号的生命周期:

  对于一个完整的信号生命周期(从信号发送到相应的处理函数执行完毕)来说,可以分为三个重要的阶段,这三个阶段由四个重要事件来刻画:

原文地址:https://www.cnblogs.com/chen-cai/p/10521410.html

时间: 2024-10-16 15:11:18

异步机制的相关文章

JavaScript单线程和异步机制

随着对JavaScript学习的深入和实践经验的积累,一些原理和底层的东西也开始逐渐了解.早先也看过一些关于js单线程和事件循环的文章,不过当时看的似懂非懂,只留了一个大概的印象:浏览器中的js程序时是单线程的.嗯,就这么点印象.当时也有些疑问:既然是单线程的,那异步调用是怎么实现的?计时器是靠谁来计时的,这单线程总不能一边执行程序一边计时吧?那些耗时的I/O操作为啥没把线程阻塞,不是说好的单线程么?相信很多不了解JavaScript单线程的同学也有过类似的疑问. 今天看了不少相关的资料,就详细

同步机制与异步机制的理解

同步机制与异步机制的理解 同步机制即在进行输入输出时,必须等待输入输出完毕后,才能进行后面的操作. 异步传输机制就不必等待完毕就可进行其它操作. 网络上有一个比较通俗的例子:请吃饭 同步就是我叫你吃饭,你听到了就立刻跟我去,若你没有反应,那我就不停的叫你,直到你回应.(同步的特点是我不能做其他任何的事情,专心等你...个人觉得女生肯定希望遇到此类的男生吧...) 异步就是我叫了你,然后我就去吃饭了,不管你听没听见.(异步的特点是不会等待正在执行的事件结束,他就可以执行其它的事件). 看了别人的帖

JavaScript异步机制

单线程异步执行的JavaScript JavaScript是单线程异步执行的,单线程意味着代码在任务队列中会按照顺序一个接一个的执行.异步代表JavaScript代码在任务队列中的顺序并不完全等同于代码的书写顺序,比如事件绑定.Ajax.setTimeout()等任务的发生时间是“不可被预期”的. 既然JavaScript是单线程机制,那Ajax为什么是异步的?setTimeout()是怎样执行的? 在浏览器中,JavaScript引擎是单线程执行的.也就是说,在同一时间内,只能有一段代码被Ja

对Node.js的异步机制的思考

Node.js的异步机制是其最大的特色,异步可以应对高并发,具有很好的性能. 但是如果在某个方法里,涉及到数据库的多层查询,异步机制反而成为阻碍.当执行完第一层SQL后,根据所得的结果集(rows)进行结果集进行遍历时,每次遍历的结果作为where条件再执行下一层SQL时,下一层及以后的SQL并不会执行,而是在结果集(rows)遍历到最后时,才执行下一层SQL. 这时,若SQL只有两三层,其实倒还好,可以合并SQL:但是SQL层数多了之后,这种异步机制却是最大的阻碍.这时,就需要用到Node.j

[转]JavaScript异步机制详解

原文: https://www.jianshu.com/p/4ea4ee713ead --------------------------------------------------------------------------- 学习JavaScript的时候了解到JavaScript是单线程的,刚开始很疑惑,单线程怎么处理网络请求.文件读写等耗时操作呢?效率岂不是会很低?随着对这方面内容的了解和深入,知道了其中的奥秘.本篇文章就主要讲解一下JavaScript怎么处理异步问题. 一.同

tcp异步机制

前面关于socket的编程,全部是基于同步机制开发的服务器和客户端,线程会进入阻塞或者挂起状态,降低线程利用率,同时程序影响效率.因此,向tcp程序引入异步回调:在异步套接字完成网络操作后,线程没有被阻塞或者挂起,接着通过调用回调函数处理后续网络操作.而主线程继续执行,以实现并行执行的结果. 为什么要引入异步机制? 看到过一个解释.当我们打开一个程序时,鼠标不停地转但是就是不见界面跳转,这是其他耗时操作阻碍了ui线程,造成ui线程不能响应用户操作.如果引用异步机制,ui线程在发起耗时操作之后马上

javascript的单线程异步机制探究

JavaScript的同步异步模式 JavaScript的语言执行环境都是单线程.单线程就是想排队那样任务需要按顺序一个一个的完成.这种模式的好处是实现起来简单,但是坏处就是如果队列中有一个任务耗费时间很长,那后边的任务就必须等前一个执行完,会拖延整个程序的执行. 为了优化这个问题,JavaScript语言将任务的执行模式分成两种,同步(Synchronous)和异步(Asynchronous). 同步模式就是后一个任务等待前一个任务结束,然后再执行,程序的执行顺序与任务的排列顺序是一致的.同步

多线程异步机制Handler以及AsyncTask

Android当中多线程的写法跟JAVA当中相差不了太多,只需要新建一个类继承自Thread类即可.然后重写父类的run方法.并在里面写耗时逻辑即可 class MyThread extends Thread { @Override public void run() { // 处理具体的逻辑 } } 启动线程 new MyThread().start(); 当然也可以像下面这样写,这样的写法更加适合,因为使用继承的方式耦合性有点高 class MyThread implements Runna

常见异步机制分析

本章内容: 1.使用 EndInvoke 等待异步调用 2.使用 WaitHandle 等待异步调用 3.轮询状态    轮询异步调用完成 4.通知机制    异步调用完成时执行回调方法 异步操作通常用于执行完成时间可能较长的任务,避免阻塞,这是与线程有所相似的地方,具体异同自行百度吧,推荐<多线程与异步的区别>这篇文章,讲得很好. 创建我们使用到的模型和委托 public delegate string AsyncDele(int callDuration, out int threadId