引子 感觉这东西看过不记一下总会忘,所以手不能懒,及时总结一下。 本文主要针对Redis的服务端模型进行分析,力争能有总体的思路和部分细致的深入。源码版本3.2.8. 正文 Redis服务端一个典型的单线程reactor模型,使用I/O多路复用来完成对文件描述符的监听,然后主线程依次处理就绪的事件。 I/O多路复用 思路非常的简单,首先我们知道I/O多路复用有好几种方式,而这常常是和平台相关的,所以为了实现的简洁,扩展性,跨平台性,Redis在这里进行了一层封装,通过一套统一的API完成整个网络通信部分。 以Linux下的epoll为例,让我们来看一下。 typedef struct aeApiState { int epfd; struct epoll_event *events; } aeApiState; static int aeApiCreate(aeEventLoop *eventLoop); 初始化,主要是分配内存和调用epoll_create生成epoll监听fd,eventLoop结构体是服务端事件 继续阅读 >>


康艺杰 17/09/30 20:55:37
数据链路层属于计算机网络的底层。数据链路层使用的信道主要有以下两种类型: 1.点对点信道 这种信道使用一对一的点对点通信方式。 2.广播信道 这种信道使用一对多的广播通信方式,因此过程比较复杂。广播信道上连接的主机很多,因此必须使用专用的共享信道协议来协调这些主机的数据发送。 使用点对点信道的数据链路层 1.数据链路和帧 所谓链路就是从一个结点到相邻结点的一段物理线段,而中间没有任何其他的交换结点。在进行数据通信时,两个计算机之间的通信路径往往要经过许多段这样的链路。可见链路只是一条路径的组成部分。 数据链路则是另一个概念。这是因为当需要在一条线路上传送数据时,除了必须有一条物理线路外,还必须要有一些必要的通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。 点对点信道的数据链路层的协议数据单元–帧。 数据链路层吧网络层交下来的数据构成帧发送到链路上,以及把接收 继续阅读 >>


陈苏扬 17/09/30 12:58:48
突然这几天不想再敲代码了。博客暂时就停更了,不过我相信我还是会回来的 作者:YinJianxiang 发表于2017/9/29 14:34:25 原文链接 阅读:3 评论:0 查看评论 继续阅读 >>


殷健翔 17/09/29 14:34:25
对象存储的使用文档见: https://cloud.tencent.com/document/product/436/9512 上传了文件之后,点击文件信息,会显示文件访问链接,如下所示: 但是这个链接的默认操作是把文件下载到本地,图片上也提醒了,如需在浏览器中预览资源,请参考静态网站最佳实践,并使用自定义域名访问,也就是说: 你必须有已经合法备案的域名才可以使这个资源在浏览器中打开 如果你有域名,那按照下面这个文档操作: https://cloud.tencent.com/document/product/436/9512 (三、绑定自定义域名) 最后如果觉得访问速度还是比较慢的话可以开启CDN加速,文档如下: https://cloud.tencent.com/document/product/436/6252 对于校园用户(1元一个月),每月有10G免费流量包。 作者:ya 继续阅读 >>


杨博东 17/09/29 14:19:43
什么是man 命令?它有什么作用? man命令是Linux下的帮助指令,通过man指令可以查看Linux中的指令帮助、配置文件帮助和编程帮助等信息 使用方法:点击链接查看教程:man使用方法 汉化:提供以下链接:man 汉化 说实话,博客园的文章还是不错滴~_~ 效果图: 简单说明:有时候与其去网上查有些东西,其实还不如自己man一下,不说规范,标准,可信度高,而且还有 示范性的小例子,写的很简洁明了,那么理解是不是更好一点呐!(其实man 出来的东西真的很全) 作者:liushengxi_root 发表于 2017/09/28 21:50:00 原文链接 http://blog.csdn.net/liushengxi_root/article/details/78128525 继续阅读 >>


刘生玺 17/09/28 21:50:00
原文链接:INTRODUCTION TO CONTROL GROUPS (CGROUPS) Red Hat Enterprise Linux 6 提供了一个新的内核功能:控制组(control groups),在本文中我们称它为 cgroups 。Cgroups允许你对在系统上运行的用户定义的任务组(进程)进行资源分配(例如CPU时间,系统内存,网络带宽或这些资源的组合)。你可以监视你配置的cgroup,拒绝cgroups访问某些资源,甚至可以在正在运行的系统上动态重新配置cgroups。可以将cgconfig(cgroup的配置)服务配置为在系统启动时自动启动,并且在启动时重新建立预定义的cgroup,从而使它们在重新启动时保持不变。 通过使用cgroups,系统管理员在分配、排序、拒绝、管理和监控系统资源上可以进行细粒度的控制。硬件资源也可以在任务和用户之间适当分配,提升整体效率。 1.1. Cgroups 是如何组织的 Cgroups 分层次的组织,如同进程一样,cgroups 子节点集成了父节点的一些属性。但是,这两种模式(进程和cgrou 继续阅读 >>


朱新全 17/09/28 16:54:34
因特网 起源于美国现在已经发展成世界上最大的国际性计算机互联网。 一下是一些网络、互联网、以及因特网的一些最基本的概念: 1.网络又若干结点和连接这些结点的链路(link)组成。网络中的结点可以是计算机、集线器、交换机或者路由器等。网络和网络可以通过路由器互连起来,这样就构成了一个覆盖范围更大的网络,即互联网。因此互联网是“网络的网络” 2.因特网是世界上最大的互连网。习惯上,大家把链接在因特网上的计算机都称为主机。网络把许多计算机连接在一起,而因特网则把许多网络连接在一起。因特网就是世界上最大的计算机网络。 因特网发展三个阶段 1.第一个阶段是从单个网络ARPANET向互连网发展的过程,1969年美国国防部创建的第一个分组交换网ARPANET最初只是一个单个的分组交换网。所有要连接在ARPANET上的主机都直接与就近的结点交换机相连。 2.第二阶段特点是建成了三级结构的因特网。1985年起,美国国家科学基金会NSF就围绕六个大型计算机中心建设计 继续阅读 >>


陈苏扬 17/09/28 00:15:19
就在昨天,被人突然问了C语言的多维数组还有递归的问题,却有点卡壳了,最后只是磕磕绊绊的答了出来,并不那么令人满意。于是今天抽空整理一下吧^_^ 问题一 给你一个二维数组,假设int a[3][4],去试着说明a,*a.**a的含义 #include<iostream> #include<cstdio> using namespace std; int a[3][4]; void init() { int count = 0; for(int i = 0 ;i < 3;i++) { for(int j = 0;j < 4;j++) { a[i][j] = count++; } } } int main() { init(); for(int i = 0;i < 3;i++) { for(int j = 0;j < 4;j++) { printf("%2d 继续阅读 >>


殷健翔 17/09/27 22:19:14
C++中输入、输出用的是cin、cout,对应的有输入输出缓冲区,cin、cout都是对缓冲区中的数据进行操作,那么看下面代码: #include <iostream> using namespace std; int hello1(); int hello2(); int main() { int a, b; cout << "a=" << hello1() << endl << "b=" << hello2() << endl; return 0; } int hello1() { cout << "hello1" << endl; return 1; } int hello2() { cout << "hello2" << endl; return 2; } 它的输出顺序是什么呢,会是 a=hello1 继续阅读 >>


吕子健 17/09/27 21:39:42
import java.util.Scanner; public class Hex2Dec { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("Enter a hex number"); String hex = input.nextLine(); System.out.println("The decimal value for hex number"+ hex + "is " + hexToDecimal(hex.toUpperCase()));//全部转换成了大写字母 } public static int hexToDecimal(String hex) { int decimalValue = 0; for(int i = 0;i < hex.leng 继续阅读 >>


陈文浩 17/09/26 22:56:39