软件开发,安全加密
本章讨论进程调度(schednling),主要关心什么时候进行进程切换及选择哪一个进程来运行。 一、调度策略 决定什么时候以怎样的方式选择一个新进程运行的这组规则就是所谓的调度策略(scheduling policy)。
定时测量是由基于固定频率振荡器和计数器的几个硬件电路完成的。 一、时钟和定时器电路 在80x86体系结构上,内核必须显示地与几种时钟和定时器电路打交道。
内核的各个部分并不是严格按照顺序依次执行的,而是采用交错执行的方式。因此这些请求可能引起竞态条件,而我们必须采用适当的同步机制对这种情况进行控制。 一、内核如何为不同的请求提供服务 把内核看作必须满足两种请求的侍者:一种请求来自顾客,另一种请求来自数量有限的几个不同的老板。
中断(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的联动起来的接口调用实例并没有,在使用旧版本的编解码接口在编译时会报接口弃用告警信息,所以最好尽快把原有的调用方式切换到新的编解码接口调用方式,告警信息如下: ...
内存泄漏 umdh
webservice soap
sql server
sql server
sql server
sql server
redis
NETTY
java dll
java JNI
java dll JNI
libevent 线程池