乐于学习与分析
中断(interrupt)通常被定义为一个事件,该事件改变处理器执行的指令顺序。这样的事件与CPU芯片内外部硬件电路产生的电信号相对应。 中断通常分为同步(synchronous)中断和异步(asynchronous)中断: 1、同步中断是当指令执行时由CPU控制单元产生的,之所以称为同步,是因为只有在一条指令终止执行后CPU才会发出中断。
在Linux源代码中,常把进程称为任务(task)或线程(thread)。 一、进程、轻量级进程和线程 进程是程序执行时的一个实例。你可以把它看作充分描述程序已经执行到何种程度的数据结构的汇集。
一、操作系统基本概念 操作系统和内核是同义词。 操作系统必须完成两个主要目标: 1、与硬件部分交互,为包含在硬件平台上的所有低层可编程部件服务。
最近在使用fiddler,发现这个真是非常最犀利的web调试工具,笔者这里强烈推荐给大家;fiddler不管是对开发还是测试,还是产品;都是不可多得的工具;开发用来抓包定位问题; 测试用来抓包,回放测试记录,构造发包用例。
Go从语言层面就支持了并行,这让C/C++程序猿们泪流满面一、goroutine goroutine是Go语言并行设计的核心。goroutine说到底就是线程,但它比线程更小,十几个goroutine可能体现在底层就是五六个线程,Go语言内部帮你实现了这些goroutine之间的内存共享。
一、什么是interface 简单地说,interface是一组method的组合,可以通过interface来定义对象的一组行为。 二、interface类型 interface类型定义了一组方法,如果某个对象实现了某个接口的所有方法,则此对象就实现了此接口。
一、method 带有接收者的函数,称之为method。 假设定义了一个struct叫长方形,现在要计算它的面积,那么按照面向过程的思路会如下实现: packeage main import "fmt" ...
一、struct Go语言中,也有struct,定义与C语言类似,举例说明如下: type person struct { name string age int } 上面就声明了一个结构体person,包含两个字段。
一、流程控制 Go语言的流程控制包括3大类:条件判断、循环控制和无条件跳转。 1、if Go语言的if条件判断语句中不需要括号,具体如下: if x > 10 { fmt.Println("x is greater than 10") } else { fmt.Println("x is less than 10") } 上面这些跟其它脚本语言相比没什么出奇的。
Go语言是一门类C语言的编译型语言,这样对于第一语言为C/C++语言的同学们来说,这就是福利。Go语言简洁易懂,本文会概要介绍其基础知识。一、Hello, World 按照惯例,介绍语法前都会先来一发Hello, World,在此也不能免俗,具体代码...
这里先以Windows为例,以后会补齐Linux部分,Linux部分更简单。 一、Golang安装 1、二进制安装 (1)点击这里下载最新版本的GO。
一、简介 RedisLive是一款用Python编写的Redis图形监控工具,其源码在这里,英文文档在这里。RedisLive的原理很简单,就是通过监控脚本来利用Redis提供的MONITOR命令从被监控Redis实例中获取数据并存储到Redis的监控实例中来做数据分析。
Redis支持两种方式的持久化,分别是定时快照(rdb)和语句追加(aof),下面会详细分析这两种持久化方式。一、定时快照 1、原理 定时快照即rdb(snapshotting),Redis内部定时器事件触发时,检查当前数据发生改变的次数与时间是否满足配置文件中指定的持久化条件,如果满足则fork出一个子进程来完成快照任务,而主进程任然提供服务,当有写入操作时由系统以内存页(page)为单位进行copy-on-write。
一、Linux启动脚本原理 1、init和运行级别 以CentOS为例,init有7个运行级别(run level),打开/etc/inittab文件能看到: # Default runlevel.
Redis的复制功能是基于内存快照即rdb的,也就是说无论使用哪种持久化机制,只要用到了复制功能,master都会产生内存快照即rdb,slave接收rdb以同步数据。Redis完成复制的源码主要分布在Replication.c(共610行中,分用于master和slave的函数,下面会详述过程。
关于Redis资料: 要看原滋原味的请点这里,要看有我参与的山寨货请点这里,当然我也不反对看这里。 在接下来的日子里,我会记录下我对Redis源码的一些认识,首先从Event driven programming library开始,没有理由,如果有:那就是redis.h包含的非系统头文件从#include "ae.h"开始,本系列文章以redis-2.6.0-rc3版源码为基准,言归正传吧。
彻底学会使用epoll(六)——关于ET的若干问题总结 ——lvyilong316 6.1 ET模式为什么要设置在非阻塞模式下工作 因为ET模式下的读写需要一直读或写直到出错(对于读,当读到的实际字节数小于请求字节数时就可以停止),而如果你的文件描述符如果不是非阻塞的,那这个一直读或一直写势必会在最后一次阻塞。
彻底学会epoll(五)—— ET模式下的注意事项 ——lvyilong316 5.1 ET模式下的读写 经过前面几节分析,我们可以知道,当epoll工作在ET模式下时,对于读操作,如果read一次没有读尽buffer中的数据,那么下次将得不到读就绪的通知,造成buffer中已有的数据无机会读出,除非有新的数据再次到达。
首先,看程序四的例子。 l 程序四 点击(此处)折叠或打开 #include unistd.
首先看程序一,这个程序想要实现的功能是当用户从控制台有任何输入操作时,输出”hello world!”。 l 程序一 点击(此处)折叠或打开 #include unistd.
分析了ET和LT的实现方式,那么分析他们的触发方式就容易多了。我们通过实现分析知道LT模式下epoll_wait被唤醒可以通过两种方式(图中红线和蓝线),而ET模式只能通过一种方式(图中红线)。
注:之前写过两篇关于epoll实现的文章,但是感觉懂得了实现原理并不一定会使用,所以又决定写这一系列文章,希望能够对epoll有比较清楚的认识。是请大家转载务必注明出处,算是对我劳动成果的一点点尊重吧。
Epoll实现分析——作者:lvyilong316 通过上一章分析,poll运行效率的两个瓶颈已经找出,现在的问题是怎么改进。首先,如果要监听1000个fd,每次poll都要把1000个fd 拷入内核,太不科学了,内核干嘛不自己保存已经拷入的fd呢?答对了,epoll就是自己保存拷入的fd,它的API就已经说明了这一点——不是 epoll_wait的时候才传入fd,而是通过epoll_ctl把所有fd传入内核再一起"wait",这就省掉了不必要的重复拷贝。
0.等待队列 在Linux内核中等待队列有很多用途,可用于中断处理、进程同步及定时。我们在这里只说,进程经常必须等待某些事件的发生。等待队列实现了在事件上的条件等待: 希望等待特定事件的进程把自己放进合适的等待队列,并放弃控制全。
作者:gfree.wind@gmail.com 博客:blog.focus-linux.net linuxfocus.blog.chinaunix.net 本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。
作者:gfree.wind@gmail.com 博客:blog.focus-linux.net linuxfocus.blog.chinaunix.net 本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。
我就不班门弄斧了。不过呢,有可能有些同学可能不知道Valgrind有哪些功能,那么我就从Valgrind的官方网站处,摘几段文字吧。 MemcheckMemcheck detects memory-management problems, and is aimed primarily at C and C++ programs.
作者:gfree.wind@gmail.com 博客:blog.focus-linux.net linuxfocus.blog.chinaunix.net 本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。
作者:gfree.wind@gmail.com博客:blog.focus-linux.net linuxfocus.blog.chinaunix.net 在看本文之前,如果不了解x86的32位机的函数布局的话,建议先阅读一下前一篇文章《如何手工展开函数栈定位问题》—— http://blog.
本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途。作者:gfree.wind@gmail.com博客:linuxfocus.blog.chinaunix.net 作为程序员,调试是一项很重要的基本功。
作者:gfree.wind@gmail.com 博客:linuxfocus.blog.chinaunix.net 在软件开发的过程中,无论如何努力,bug几乎都是必不可少的。当某些bug发生时,该进程会产生coredump文件。
曾经的曾经,被system()函数折磨过,之所以这样,是因为对system()函数了解不够深入。只是简单的知道用这个函数执行一个系统命令,这远远不够,它的返回值、它所执行命令的返回值以及命令执行失败原因如何定位,这才是重点。
讨论MySQL选择索引时单列单列索引和多列索引使用,以及多列索引的最左前缀原则。 1. 单列索引 在性能优化过程中,选择在哪些列上创建索引是最重要的步骤之一。
问题描述: 最近遇到了一个syn丢包的情况,当系统磁盘、网络、cpu都无压力的时候,系统莫名其妙出现“sync to listen sockets drop”问题;无论带宽是10M还是8G,都会出现这种这种情况。
在ffmpeg的源代码中,有新旧版本的编解码接口调用示例,但是demux、mux然后decode、encode的联动起来的接口调用实例并没有,在使用旧版本的编解码接口在编译时会报接口弃用告警信息,所以最好尽快把原有的调用方式切换到新的编解码接口调用方式,告警信息如下: ...
转载:http://mingxinglai.com/cn/2015/12/material-of-mysql/ 我这里推荐几本MySQL的好书,应该能够有效避免学习MySQL的弯路,并且达到一个不错的水平。
整理网上找到的Golang语言学习资料 基础 基础教程 书籍在线版 Go 指南-A Tour of Go Go语言圣经(中文版) Effective Go中文版 Go Web编程 build...
https://www.52pojie.cn/thread-664189-1-1.html 无论是分析程序崩溃原因,还是解决程序hang问题,我们最常查看的就是程序调用堆栈。
Charles 4.2 下载Charles v4.2 并安装 云盘下载: Mac OS X Windows 64 bit Windows 32 bit 官网下载: 前往官网下载...
http://hyhvi.iteye.com/blog/1549639 在Win32控制台程序下,要使用OTL库,只需在程序加入OTL头文件,并写上以下两句代码即可(ODBC方式): #define OTL_ODBC #include "otlv4.
http://blog.chinaunix.net/uid-10386087-id-2959221.html 今天遇到一个内存泄露的问题。
WSDL文档可以分为两部分。顶部分由抽象定义组成,而底部分则由具体描述组成。抽象部分以独立于平台和语言的方式定义SOAP消息,它们并不包含任何随机器或语言而变的元素。
句柄泄漏检测-简单 在调试之前首先确定是不是真的发生了句柄泄漏,简单的检测方法是通过任务管理器来查看进程的句柄数是不是居高不下,任务管理器默认不显示句柄数,要查看进程的句柄数需要先切换到进程选项卡,然后单击“查看”菜单,选择“选择列”,然后勾选“句柄数”。
我在做SQL Server 7.0技术支持的时候有客户问我,“我的SQL Server buffer pool很大,有办法知道是哪些对象吃掉我的buffer Pool内存么?比方说,能否知道是哪个数据库,哪个表,哪个index占用了buffer Pool么?”当时我没有找到这个问题的答案,但是我一直记着这个问题。
SQL 2008执行语句遇到内存不足的案例(error 701)之一 某个特定的存储过程在SQL 2008中执行会遇到以下错误: Msg 701, Level 17, State 123, ...
是介绍Redis网络监听的最后一篇文章,着重分析定时时间处理函数serverCron,这个函数其实已经和网络监听没多大关系了,当时因为其绑定在Redis自定义的事件库的定时事件上,所以放到一起来讲。
这篇文章接上一篇,主要介绍Redis网络监听流程的各个步骤。 aeCreateEventLoop :创建用于循环监听的 eventLoop , Redis 支持主流的三种事件触发机制: select ,epoll, kqueue, 可以通过在 config.
接下来的三篇文章将对Redis的网络监听流程及涉及到事件库和各个主要方法进行介绍。 在介绍 redis的网络监听流程和事件库之前,我们先设想一下,如果我们不采用 libevent 等流行的开源库进行基于事件的网络监听,而是自己去实现一套基于事件的库去进行网络监听,需要考虑些什么,然后我们带着这些问题去分析 Redis是如果通过少量的代码来完成这个工作的。
前面写了一篇文章简单介绍Redis的list结构。再写完之后,我觉得有必要熟悉Redis的启动过程和如何读取Redis的命令,因此本文将通过分析代码来介绍Redis的启动过程,通过查看Redis 的启动脚本,得知Redis的启动时从Redis.c的main方法开始的。
Redis 3.0 源码注释 本项目是注释版的 Redis 3.0 源码, 原始代码来自: https://github.com/antirez/redis 。