自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 问答 (1)
  • 收藏
  • 关注

原创 关于MYSQL的基本命令

昨天看了一句话,学东西不要想着该不该学,直接上手做就好,放国庆七天,我决定把MYSQL这本书给啃了,然后平均一天70面的看,先大致过一遍总结所有的命令操作,希望能够实现自己的目标!知识概念:主键:又称为主码,是表中一列或多咧的组合。主键约束要求主键列的数据唯一,并且不允许为空。主键能够唯一的标识表中的一条记录,可以结合外键来定义不同数据表之间的关系,并且可以加快数据库查询的速度。主

2016-09-30 19:08:06 801

原创 libevent的集成信号处理

本节主要介绍libevent对signal事件的具体处理框架,包括事件注册,删除和socket pair通知机制,以及是如何将Signal事件集成到事件主循环之中的。 1.继承策略–使用socket pair Socket pair就是一个socket对,包含两个socket,一个读socket,一个写socket。 工作方式: 线程A-> W -> Write socket(经由Socke

2016-09-29 10:57:26 573

原创 操作系统精髓与设计原理-五个重要的理论进展

1.进程定义:一个正在执行的程序(简要的,后面会有详细注解)进程的组成:(1)一段可执行的程序(2)程序所需要的相关数据(变量,工作空间,缓冲区等)(3)程序的执行上下文(根本),执行上下文又称为进程状态进程管理的方法:可以用一个进程表来包含记录每个进程,表项内容包括指向包含进程的存储块地址的指针,还包含该进程的部分或全部执行上下文。进程可以被当作数据结构来

2016-09-28 17:13:35 671

原创 第二章 操作系统概述

操作系统的三个目标:(1)方便:操作系统使计算机更易于使用(2)有效:操作系统允许以更有效的方式使用计算机系统资源(3)扩展的能力:在构造操作系统时,应该允许在不妨碍服务的前提下有效的开发,测试和引进新的系统功能一.作为用户/计算机接口的操作系统:最终用户不关心计算机的硬件细节,所以在他们眼里计算机系统就是一组应用程序。最重要的系统程序就是操作系统,它为程序

2016-09-27 22:34:36 478

原创 libevent源码剖析-事件主循环

事件主循环主要是通过event_base_loop()函数完成的 event_base_loop所执行的循环 开始 第一步:(校正系统时间)第二步:(根据timer heap的最小超时时间计算系统I/O多路复用的最大等待时间)第三步:(更新last waittime,并清空time cache)第四步:(调用系统I/O 多路复用等待就绪I/O events)第五步:(检查signal的激活标记

2016-09-27 15:45:30 963

原创 多线程同时上传文件的实现

一 首先需要一个结构体 这个结构体应当拥有 (1)源文件的句柄 (2)目标文件的句柄 (3)写文件的起始位置 (4)写文件的终止位置二 每一个结构体代表了文件的一部分 如果说把文件分成了5份,那就应该定义5个结构体,然后求出文件的大小,把文件的大小分成五份, 然后记录这一部分应当从文件的何处拷贝到何处,以及目标文件和源文件的句柄三 开始定义线程内的函数,通过lseek函数找到应当

2016-09-26 21:58:24 4419

原创 DMA--直接存储器访问 可重入过程

讲道理的说。。我不知道为什么用MarkDown写文章写一半所有写的东西都丢失了。。。所以从终端到I/O通信我总结的都丢了。。好在看了的毕竟是自己的。。。留个印象就好,我就不再一次的去写了。。DMA貌似很重要,所以我单开一篇。。不用MarkDown了    DMA可以由系统总线中的一个独立模块完成,也可以并入一个I/O模块中。    当处理器要读或写一块数据时,它给DMA发送以下信息

2016-09-26 20:08:29 453

原创 操作系统精髓与设计原理--计算机系统概述

最近去听一个学长的宣讲,他表示操作系统很重要,要多要看书,多理解。。。所以我决定再把操作系统看一遍,巩固内功。操作系统的运作: 通过利用一个或多个处理器的硬件资源,为系统用户提供一组服务,它还代表用户来管理辅助存储器和输入/输出设备。计算机的基本构成: 处理器:控制计算机的操作,执行数据处理功能,当只有一个处理器的时候它指中央处理器(CPU)。主存储器(实存储器): 存储数据和程序。此类存储器

2016-09-25 22:24:56 657

原创 事件处理框架-event_base

分析libevent的事件处理框架event_base和libevent注册,删除事件的具体流程,这就表现为event_base结构体.由于源代码的event_base定义的变量太多就先放上书中精简过的有价值的struct event_base{const struct eventop* evsel;void* evbase;int event_count;int event_gotterm

2016-09-25 16:15:22 584

原创 libevent中的event结构体

libevent基于事件驱动,event是他整个库的核心event的作用:相当于Reactor框架中的事件处理程序组件,它提供了函数接口,供Reactor在事件发生时调用,以执行相应的事件处理,通常他会绑定一个有效的句柄struct event { TAILQ_ENTRY (event) (ev_active_next); TAILQ_ENTRY (event) (ev_next);

2016-09-24 22:20:04 1046

原创 整体框架

libevent代码分类头文件内部使用的头文件辅助功能函数日志libevent框架对系统I/O多路复用机制的封装信号管理定时事件管理缓冲区管理基本数据结构基于libevent的两个实用库1)头文件event.h:时间宏定义,主要结构体event声明,接口函数声明2)内部头文件xxx-internal.h:事件宏定义,接口函

2016-09-20 21:37:23 530

原创 Reactor模式,两种高效的并发模式

Reactor释义"反应堆",是一种事件驱动机制,和普通函数调用的不同之处在于,Reactor逆置了事件处理流程,应用程序需要提供相应接口并注册到Reactor上,如果相应的时间发生,Reactor将主动调用应用程序注册的接口,这些接口又称为“回调函数”。Reactor简单的描述,就是当一件事情到时间了,那么他会自动执行。Reactor模式的优点:(1)响应快,不必为单

2016-09-20 21:10:55 3769

原创 线程池总结以及实现

为什么需要线程池:现在大多数网络服务器,包括Web服务器,Email服务器以及数据库服务器等都具有一个共同点,就是单位时间内处理数目巨大的连接请求,但是处理时间却很短。如果不用线程池,那么针对每一个请求,我们要花费时间如下T1:线程创建时间T2:线程执行时间,包括线程的同步等时间T3:线程销毁时间那么每一个线程我们都要话费他的创建时间和销毁时间,那么时间的花费就是(T1+T

2016-09-19 21:17:21 514

原创 进程池总结

一般我们是通过动态创建子进程(或者子线程)来实现并发服务器的,这样的缺点(1)动态创建进程(或线程)比较耗费时间,这将导致较慢的客户响应(2)动态创建的子进程通常只用来为一个客户服务,这样导致了系统上产生大量的细微进程(或线程)。进程和线程间的切换将消耗大量CPU时间(3)动态创建的子进程是当前进程的完整映像,当前进程必须谨慎的管理其分配的文件描述符和堆内存等系统资源,否则子进程可能复

2016-09-19 18:52:17 5010

原创 多线程编程总结

之前自己写过一个所谓的线程总结,那是刚学习的时候,想的只是怎么创建线程,后来剖析源码的时候发现了自己在这方面知识的匮乏,于是最近痛定思痛,再去去看了一遍多线程编程。根据运行环境和调度者身份:线程可以分为内核线程和用户线程。内核线程由内核来调度,运行在内核空间用户线程运行在用户空间由线程库来调度。当进程的一个内核线程获得CPU使用权时,它就加载并运行一个用户线程。

2016-09-13 20:34:04 298

原创 多进程编程总结

进程:进程的创建:pid_t fork(void);该函数每次调用都会返回两次,在父进程中返回子进程ID,在子进程中返回0,所以当fork()==0的时候就是子进程了,失败就返回-1fork函数做的工作:fork函数复制当前进程,在内核进程表中创建一个新的进程表项。新的进程表项有很多属性和原进程相同:比如堆指针,栈指针,和标志寄存器的值。新的进程表项属性与原进程

2016-09-12 12:15:19 5973

原创 排序总结

根据排序过程中设计的存储器不同,可将排序方法分为两大类内部排序:待排序记录存放在计算机随机存储器中进行的排序过程外部排序:指的是待排序记录的数量很大,以致内存一次不能容纳全部记录,在排序过程中尚需对外村进行访问的排序过程//////////////////////////////////////////内部排序//////////////////////////////////

2016-09-08 19:33:19 454

原创 关于webbench的源码剖析

webbench主要由两个文件组成socket.c:建立网络连接,一切小于0的返回值都代表连接失败,成功就返回可用的socket整体框架走向:(1)首先检查命令形式的正确与否(2)对传入网址进行操作,检查网址形式正确与否,提取里面的网络地址和端口号(3)进入bench函数,在这个函数中创建管道和子进程,在子进程中调用benchcore进行http

2016-09-06 18:56:56 705

原创 boost库的weak_ptr剖析

weak_ptr最大的特点就是他是一个弱指针,他和shared_ptr的区别重点突出于“弱”,因为它是弱指针,所以它仅有几个接口,仅能完成很少的工作,它可以从一个shared_ptr或weak_ptr对象构造,获得对资源的观测权,它没有共享资源,所以他对象的创建不会引起指针引用计数的增加,它对象的析构不会引起计数器的减少(这也是它能够使得shared_ptr打破循环计数的重要依据)http:/

2016-09-05 20:32:16 460

原创 boost库的shared_ptr剖析

shared_ptr其实就是一个模板类。shared_ptr是Boost里面最有价值的的智能指针。它封装了一个原生态指针和一个引用计数器,这个引用计数器是一个类shared_count。shared_ptr支持比较运算,重载了operatorshared_ptr的应用:当shared_ptr指针指向了一个对象,之后又有另一个shared_ptr指针指向了那个对象,那么这个指针的计数变成了二

2016-09-05 19:49:01 524

原创 linux下如何捕捉方向键

最近一直在完善自己linux下shell的项目,遇到了一个难处就是如何实现方向键在shell中的功能,那么要实现这个功能首先就应该要学会如何抓取方向键的输入,毕竟方向键的输入和平常的输入不同。    首先我们要用到一个新的头文件#include     我也就是捕捉方向键,所以进入keypad模式,    那么步骤如下:   initscr();   crmode();//这三

2016-09-03 22:15:01 2689

原创 有关Unix或者linux的知识

不定期更新,看到哪里不会我就添。(PS:我不会或者不熟练的我就添,里面可能有各种百度和别人博客的东西,我都尽量标明出处)1.在Unix系统中那些可以用来进程间通信(百度的)(1)管道(Pipe):管道可用于具有亲缘关系进程间的通信,允许一个进程和另一个与它有共同祖先的进程之间进行通信。(2)命名管道(named pipe):命名管道克服了管道没有名字的限制,因此,除具有管道所具有的

2016-09-01 22:10:56 206

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除