![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux
文章平均质量分 94
Shreck66
这个作者很懒,什么都没留下…
展开
-
linux下aio异步读写详解与实例
1.为什么会有异步I/Oaio异步读写是在linux内核2.6之后才正式纳入其标准。之所以会增加此模块,是因为众所周知我们计算机CPU的执行速度远大于I/O读写的执行速度,如果我们用传统的阻塞式或非阻塞式来操作I/O的话,那么我们在同一个程序中(不用多线程或多进程)就不能同时操作俩个以上的文件I/O,每次只能对一个文件进行I/O操作,很明显这样效率很低下(因为CPU速度远大于I/O操作的速度,所以当原创 2015-09-27 10:43:56 · 17076 阅读 · 0 评论 -
探索redis数据过期策略
为什么要处理数据过期1.过期设置为程序逻辑的一部分,所以为了保证逻辑正确(不读取到过期数据),不得不对缓存做数据过期处理2.过期数据,对业务来说已是无用数据,但是却仍然占有服务资源(主要是内存和磁盘),故处理过期数据,将其删除可以使服务资源得到释放处理过期数据的常用策略策略说明优点缺点定时删除根据键的过期时间设置定时器,触发超时及删除对应键删除及时,内存友好在...原创 2019-03-19 16:35:46 · 2118 阅读 · 0 评论 -
MySQL数据复制原理及实践
##1.数据复制概述####1.1数据复制定义数据复制使一个服务上的数据与另一个服务上数据保持同步####1.2复制用途数据分布负载均衡备份高可用和故障切换MySQL升级测试##2.数据复制工作原理####2.1复制工作流程介绍(以主从架构为例)MySQL复制原理比较简单,其核心工作示意图如下:主库把更新操作记录在二进制日志文件中备库上的I/O线程收到主库的更新事...原创 2018-11-07 17:35:27 · 352 阅读 · 0 评论 -
Linux下源码分析利器Ctags
最近有看一些代码量比较大的开源代码,在阅读的过程中感觉读大型的源码真的好难。我们先不说其逻辑方面的难度,而是你在读的过程中所遇到的大量的宏定义,类型定义,函数定义以及一些枚举变量等把我们搞的是晕头转向,因为我们得到其他文件里找到他们的原始定义,这真是最令人头疼的地方。此时你是否会想要是有一个程序能自动帮我们找到上述东西的原始定义那该多好。其实linux下就有这个工具ctags1.Ctags的安装方法原创 2016-05-03 23:16:48 · 4010 阅读 · 0 评论 -
栈溢出攻击的一次简单尝试
1.栈溢出的一个简单实例下面程序可能是那些接触C不久之后,可能会犯的一个数组越界导致缓冲区溢出的一个小例子#include <stdio.h>#include <unistd.h>#include <stdlib.h>void func(void){ int a = 23456; int b[2]; printf("b[2] = %d\n",b[2]); }in原创 2016-03-10 00:38:37 · 3899 阅读 · 2 评论 -
SCTP协议详解与实例
1.SCTP是什么?只要是接触过编程的人,当你问他传输层都有哪些协议?我想几乎很多人会说TCP,IP协议而很少有人知道SCTP(流控制传输协议)这个和上述俩个协议具有相同地位的协议。 SCTP提供的服务与TCP,UDP类似,或者甚至可以理解为其是TCP与UDP协议各自优点的组合后的产物。2.SCTP的特点(1)SCTP连接的建立SCTP协议建立连接可调用int sctp_connectx(int原创 2016-03-31 18:24:13 · 28092 阅读 · 3 评论 -
利用ucontext.h中接口实现用户级别线程库
想必大家在初次接触多线程或多进程时一定会感觉这是多么的神奇!一个程序居然可以“同时”执行好多工作,此时你一定有一探其究竟的想法吧?可是无奈,这些都是内核中十分复杂的代码。对于初入计算机大门的我们,去看那些东西,的确有些困难。但是不用灰心,本篇博文我将为大家介绍一个由我自己实现的简单线程,代码也就100多行,程序还很简陋,但是我感觉这有助于我们对进程或线程的理解1.设计思路要实现线程,那么就先得有个简原创 2016-01-07 17:54:02 · 4442 阅读 · 7 评论 -
浅析linux服务端socket编程
记得大一第一次接触linux服务端编程时,当时看的1.Socket接口socket接口用来创建一个套接字描述符,函数定义如下int socket(int domain,int type,int protocol);//成功返回文件描述符,失败返回-1参数介绍: .domain指定使用哪个底层协议,PF_INET(ipv4) PF_INET6(ipv6) .type指定协议的服务原创 2015-12-01 00:46:46 · 1928 阅读 · 4 评论 -
muduo网络库中buffer的设计
1.为什么非阻塞网络编程中应用层buffer是必须的非阻塞I/O(在这里可以理解为非阻塞I/O加T/O复用)的核心思想就是避免将当前线程阻塞在I/O系统调用上,这样可以使我们的I/O线程只阻塞在I/O复用函数上(epoll_wait或poll,select)使其能够服务更多的连接socket那么如何才能做到这一点呢?这里我们就需要实现应用层的输入输出buffer(1)什么情况下用到output b原创 2015-11-03 16:41:45 · 3776 阅读 · 2 评论 -
linux下动态与静态链接库的使用及区别
1.为什么要有链接库我们平时在写C代码时一定会经常重复写某些很多程序中都经常用到的代码,比方说字符串的简单操作函数,或者链表等。那么我们如何能避免老是重复的去写这些基础的代码呢?也许你会不假思索的想到把这些常用的函数装到一个头文件里,调用的时候只要include该头文件不就可以么。的确这样做是可以达到目的,但是如果我们把许多种不同功能的操作代码(可以理解为一个函数)都放在一个头文件下,数量少了还好,原创 2015-11-02 09:56:01 · 13355 阅读 · 1 评论 -
linux新增特性eventfd
1.新内核版本为什么要增加eventfd?首先说明的一点是eventfd是用来实现多进程或多线程的之间的事件通知的,那么我们在没接触eventfd之前用到的事件通知机制都有那些?1.条件变量2.管道我们来逐一比较此俩中机制与eventfd的效果方面的好坏,首先,条件变量必须和互斥锁结合使用,使用起来麻烦,而且性能未必比eventfd好,其次条件变量不能像eventfd一样为I/O事件驱动,因此不原创 2015-11-10 11:50:27 · 6991 阅读 · 0 评论 -
细说redis持久化流程
文章目录一. 概述redis持久化的俩种模式二. rdb持久化模式1.rdb持久化核心思路2.rdb持久化难点3.rdb持久化后rdb文件的格式4.rdb持久化触发条件5.rdb持久化数据安全性6.rdb持久化核心源码(bgsave为例)三. aof持久化模式1.aof持久化核心思路2.aof持久化难点3.aof持久化文件格式4.aof持久化触发条件5.aof持久化对redis性能影响6.aof文...原创 2019-05-17 10:32:32 · 1276 阅读 · 0 评论