回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
一、概念: 大多数内核子系统都是相互独立的,因此某个子系统可能对其它子系统产生的事件感兴趣。为了满足这个需求,也即是让某个子系统在发生某个事件时通知其它的子 系统,Linux内核提供了通知链的机制。通知链表只能够在内核的子系统之间使用,而不能够在内核与用户空间之间进行事件的通知。 通知链表是一个函数链表,链表上的每一个节点都注册了一个函数。当某个事情发生时,链表上所有节点对应的函数就会被执行。所以对于通知链表来说有一个通知 方与一个接收方。在通知这个事件时所运行的函数由被通知方决定,实际上也即是被通
函数指针:其本质是一个指针变量,该指针指向这个函数。简单来说,函数指针就是指向函数的指针。
目前我们对EasyCVR私有协议SDK的开发已经进入了测试阶段,EasyCVR可以通过私有协议SDK的形式(eSDK)接入华为视频平台,接入的第一步就是资源准备接口,下面提供华为视频平台对接第一步资源准备接口的使用方法。
Node(正式名称 Node.js)是一个开源的、跨平台的运行时环境,有了它,开发人员可以使用 JavaScript 创建各种服务器端工具和应用程序。此运行时主要用于浏览器上下文之外(即可以直接运行于计算机或服务器操作系统上)。据此,该环境省略了一些浏览器专用的 JavaScript API,同时添加了对更传统的 OS API(比如 HTTP 库和文件系统库)的支持。
Netfilter (配合 iptables)使得用户空间应用程序可以注册内核网络栈在处理数据包时应用的处理规则,实现高效的网络转发和过滤。很多常见的主机防火墙程序以及 Kubernetes 的 Service 转发都是通过 iptables 来实现的。
Linux内核调试技术——kprobe使用与实现(五)-触发kprobe探测和回调
关于 netfilter 的介绍文章大部分只描述了抽象的概念,实际上其内核代码的基本实现不算复杂,本文主要参考 Linux 内核 2.6 版本代码(早期版本较为简单),与最新的 5.x 版本在实现上可能有较大差异,但基本设计变化不大,不影响理解其原理。
1、linux 64位系统可以运行32位linux程序。需要在linux64位系统新增一些设置:
大家好,今天跟大家分享的是在Linux中驱动led。今天的文章包括后面还有一篇是酝酿了近两个星期才开始动手写,可见这部分内容会比较抽象一些。
简要 接下来做一个专辑《rt-thread驱动框架分析》,我会按照自己的理解来描述每一个驱动。有不对的欢迎随时来怼我。 rt-thread的版本分为两大类,一个是完整版本,一个是nano版本。而驱动框架是相对于完整版本的。所以要了解驱动框架,只能在完整版上了解。 rt-thread提供了很多驱动框架,比如常见的外设驱动:I2C, SPI等。还有网络相关的WLAN驱动等。 驱动框架分析,主要以STM32来分析。 驱动分析 API简要说明 rt-thread的pin驱动为上层应用提供两套不同的API,一套是对接
我们知道 Linux 服务器有个 Cron 的功能,可以用来设置定时执行的作业,但是并不是每个人都熟悉 Linux 系统,并且也不是所有的主机管理面板都有 Cron 栏目。
每一种技术的出现必然是因为某种需求。正因为人的本性是贪婪的,所以科技的创新才能日新月异。
左边主机,右边从机;USB 有主机控制器 UHC 和从机控制器 UDC,主机侧有 USB Device Driver,从机侧有 USB Function Driver。
异步的概念首先在 Web2.0 中火起来,是因为浏览器中 JavaScript 在单线程上执行,而且它还与 UI 渲染共用一个线程。这意味着 JavaScript 在执行的时候 UI 渲染和响应是处于停滞状态的。前端通过异步的方式来消除 UI 阻塞的现象。假如业务场景中有一组互不相关的任务需要完成,可以采用下面两种方式。
上面提到的子包都已被引入到pynput库中。要使用上面的子包,从pynput中引入即可。
新版的EasyNVR默认都是使用的sqlite数据库,sqlite数据库占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了,并且能够支持Windows/Linux/Unix等主流的操作系统,同时能够跟很多程序语言相结合。
作者:mingguangtu,腾讯 IEG 后台开发工程师 select/poll/epoll 是 Linux 服务器提供的三种处理高并发网络请求的 IO 多路复用技术,是个老生常谈又不容易弄清楚其底层原理的知识点,本文打算深入学习下其实现机制。 Linux 服务器处理网络请求有三种机制,select、poll、epoll,本文打算深入学习下其实现原理。 吃水不忘挖井人,最近两周花了些时间学习了张彦飞大佬的文章 图解 | 深入揭秘 epoll 是如何实现 IO 多路复用的 和其他文章 ,及出版的书籍《深入理
Libevent、libev、libuv三个网络库,都是c语言实现的异步事件库Asynchronousevent library)。
Linux 服务器处理网络请求有三种机制,select、poll、epoll,本文打算深入学习下其实现原理。
evio 是一个基于事件驱动的网络框架,它非常轻量而且相比 Go net 标准库更快。其底层使用epoll 和 kqueue 系统调度实现。
我们都知道多线程可以提高程序运行的速度,但是至于能够提高多少却一直没有一个直观的印象,下面就用Linux C的多线程编程技术,简要分析下多线程的运行效率。
// data->early_suspend.level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN + 1; data->early_suspend.suspend = gxx_suspend; data->early_suspend.resume = gxx_ts_resume; register_early_suspend(&data->early_suspend);
Reactor 与 Proactor 模型是近几年技术领域频频提到的两个设计模式,那么,究竟什么是 Reator,什么又是 Proactor,他们之间有什么异同呢? 本文就来详细介绍一下。
在《Linux 内核调试利器 | kprobe 的使用》一文中,我们介绍过怎么使用 kprobe 来追踪内核函数,而本文将会介绍 kprobe 的原理和实现。
很多公司面试的时候都喜欢问为什么 Redis 那么快?这就得益于 Redis的 事件驱动模块 ,什么是 事件驱动 呢?通俗来说,事件驱动 指的是当某一事件发生触发某一处理过程。举个例子,当发生火灾时,就会触发消防队救火,在这个例子中,事件是发生火灾,而处理过程是消防队救火。而在 Redis 中的事件指的是客户端连接就绪(可接收或者可发送数据),所以当客户端连接就绪时,就会触发 Redis 的处理过程(调用某一个处理函数)去处理客户端连接。
mmap是linux操作系统提供给用户空间调用的内存映射函数,很多人仅仅只是知道可以通过mmap完成进程间的内存共享和减少用户态到内核态的数据拷贝次数,但是并没有深入理解mmap在操作系统内部是如何实现的,原理是什么。
Linux 内核是如何实现无线网络接口呢?数据包是通过怎样的方式被发送和接收呢? 刚开始工作接触 Linux 无线网络时,我曾迷失在浩瀚的基础代码中,寻找具有介绍性的材料来回答如上面提到的那些高层次的问题。 跟踪探索了一段时间的源代码后,我写下了这篇总结,希望在 Linux 无线网络的工作原理上,读者能从这篇文章获得一个具有帮助性的概览。
事件循环是Node.js能够实现非阻塞I/O的基础,尽管JavaScript应用是单线程运行的,但是它可以将操作向下传递到系统内核去执行。
目前互联网业界主流的服务器开发系统主要包括linux和windows两款操作系统,很多网络服务商需要获取客户端的真实IP和Port,特别是IP地址,对业务策略进行制定,优化;同时客户端的IP和Port信息作为基本的统计数据,对线上业务运营的监控和评估具有非常重要的意义。大部分情况下,服务器端可以通过网络API直接获取连接的网络信息,但是针对服务器前侧添加了代理的网络框架来说,就无法直接通过网络API来获取了。而TOA通过扩展TCP首部的可选字段,可以很好的将客户的真实的IP和Port信息传递到服务器端。因此需要一种手段可以在服务器侧来解析TOA字段,linux系统下的获取在业界有比较成熟的方法获取,但是windows系统下至今没有一种成熟的方案去获取。
同步阻塞模式。在JDK1.4以前,使用Java建立网络连接时,只能采用BIO方式,在服务器端启动一个ServerSocket,然后使用accept等待客户端请求,对于每一个请求,使用一个线程来进行处理用户请求。线程的大部分时间都在等待请求的到来和IO操作,利用率很低。而且线程的开销比较大,数量有限,因此服务器同时能处理的连接数也很低。
在数据的发送过程中,从上至下依次是“加头”的过程,每到达一层数据就被会加上该层的头部;与此同时,接受数据方就是个“剥头”的过程,从网卡收上包来之后,在往协议栈的上层传递过程中依次剥去每层的头部,最终到达用户那儿的就是裸数据了。
某机器上网络出现时断时续的问题,网络的同事发现ovs进程的CPU消耗很高,硬件offload的规则下发卡住的问题。即通过netlink向内核发送消息卡住。
上一节说了UDP,这一节就聊聊TCP,毕竟它俩经常同时出现。优缺点上一节也提了一下:安全性好,速度慢。
linux 中最常用的 IO 模型是同步 IO,在这个模型中,请求发出后应用程序会阻塞直到满足条件(阻塞 IO),或在不满足条件的情况下立即返回出错(非阻塞 IO),这样做的好处是程序在等待 IO 请求完成时不会占用 CPU。 POSIX 定义了异步 IO 应用程序接口(AIO API),linux 2.6 以上版本的内核也实现了内核级别的异步 IO 调用。 异步 IO 的基本思想是允许进程发起很多 IO 操作,而不用阻塞任何一个,也不用等待任何操作的完成,直到 IO 操作完成时,进程可以检索 IO 操作的结果。
http://www.cnblogs.com/Anker/p/3265058.html
硬件定时器产生的周期性中断,中断频率就是系统频率(拍率)。系统拍率可以设置,单位是HZ,可在编译内核时通过图形化界面设置,设置路径如下:Kernel Features -> Timer frequency([=y])
#include <linux/earlysuspend.h>
多路复用太复杂了,和以往的编程方式差别很大,一时半会大家可能理解不了。在写这篇文章的时候,我复习了一些进程、线程和协程相关的内容,但还是难免理解困难,因此只希望大家通过这篇文章对Python中的IO多路复用有个了解就行。
node.js中,各种模块有一种标准的写法: this._process.exec(command, options, function (err, stdout, stderr) { callback(err, stdout, stderr); }) 这里说的标准,是指回调函数,一般有err作为第一个参数,然后是具体的数据。 写服务器程序的时候,或多或少会用到child_process这个模块,而这个模块的用法正如上边代码所示。 例如调用一个shell命令删除文件,
本文记录了对某发行版Linux中一个安全模块(LSM)的逆向过程,该LSM对系统中待运行的程序进行安全校验,数据流穿越内核态与用户态,涉及系统内核及系统服务。此LSM对系统安全性的增强效果明显,其设计思路值得防守方研究学习,可于个人终端或服务器安全防护中应用。特此对逆向内容记录,希望能为读者在终端防护方面拓宽思路,同时欢迎感兴趣的师傅们交流学习。
在物联网相关的应用开发中或多或少都会用到MQTT,以下这个开源项目是我基于杰杰大佬的mqttclient项目进行二次封装的接口:
一、RT-Thread简单介绍 大部分MCU工程师或多或少都接触过实时OS,如今实时操作系统种类繁多,有Ucos,Freertos,liteOS,TinyOS,RT-Thread等等各种实时OS,这么
终于可以写Runtime PM(后面简称RPM)了,说实话,蜗蜗有点小激动。因为从个人的角度讲,我很推崇使用RPM进行日常的动态电源管理,而不是suspend机制。
最近为了解决一个技术问题,需要用到内核里中断下半部的tasklet机制,使用过程遇到了非常有趣的问题。在解决问题过程中,也逐步加深了对tasklet机制的理解。本文把这些收获记录下来和大家一起分享。
线程池是一种管理线程的机制,它可以在需要时自动创建和销毁线程,以及分配和回收线程资源。线程池的主要优点是减少了频繁创建和销毁线程所带来的开销,提高了系统的稳定性和可扩展性。此外,线程池还可以有效地控制线程的数量,避免过多线程导致的资源竞争和系统过载
linux 3.5 版本内核开始集成一个 IP 信息包过滤系统 — iptables。 利用 iptables,我们可以很有效的控制 IP 信息包的过滤条件和防火墙配置。 他可以配置有状态的防火墙规则,通过发送或接收信息包所建立的连接的状态来对网络信息包进行过滤。 本文我们就从原理出发,详细介绍一下 iptables。
IP层叫分片,TCP/UDP层叫分段。网卡能做的事(TCP/UDP组包校验和分段,IP添加包头校验与分片)尽量往网卡做,网卡不能做的也尽量迟后分片(发送)或提前合并片(接收)来减少在网络栈中传输和处理的包数目,从而减少数据传输和上下文切换所需要的CPU计算时间。
领取专属 10元无门槛券
手把手带您无忧上云