2018年2月23日

浅析I/O模型

摘要: 以下是本文的目录大纲: 一.什么是同步?什么是异步? 二.什么是阻塞?什么是非阻塞? 三.什么是阻塞IO?什么是非阻塞IO? 四.什么是同步IO?什么是异步IO? 五.五种IO模型 六.两种高性能IO设计模式 一.什么是同步?什么是异步? 同步和异步的概念出来已经很久了,网上有关同步和异步的说法也有 阅读全文

posted @ 2018-02-23 16:30 AlanTu 阅读(161) 评论(0) 推荐(0) 编辑

I/O复用 - 各种不同的IO模型

摘要: 一、概述 我们看到上面的TCP客户同时处理两个输入:标准输入和TCP套接字。我们遇到的问题就是在客户阻塞于(标准输入上的)fgets调用期间,服务器进程会被杀死。服务器TCP虽然正确地给客户TCP发送一个FIN,但是既然客户进程阻塞于从标准输入读入的过程,它将看不到这个ROF,知道从套接字读时为止( 阅读全文

posted @ 2018-02-23 16:27 AlanTu 阅读(281) 评论(0) 推荐(0) 编辑

Linux查看端口使用状态、关闭端口方法

摘要: 【摘要】 今天在编写socket,在期间遇到查看某个端口的状态,随后从网上找了一下,现在总结一下。 【内容】 大家都知道,端口不是独立存在的,它是依附于进程的。某个进程开启,那么它对应的端口就开启了,进程关闭,则该端口也就关闭了。下次若某个进程再次开启,则相应的端口也再次开启。而不要纯粹的理解为关闭 阅读全文

posted @ 2018-02-23 16:26 AlanTu 阅读(88998) 评论(0) 推荐(0) 编辑

epoll讲解

摘要: 首先我们来定义流的概念,一个流可以是文件,socket,pipe等等可以进行I/O操作的内核对象。 不管是文件,还是套接字,还是管道,我们都可以把他们看作流。 之后我们来讨论I/O的操作,通过read,我们可以从流中读入数据;通过write,我们可以往流写入数据。现在假定一个情形,我们需要从流中读数 阅读全文

posted @ 2018-02-23 16:25 AlanTu 阅读(278) 评论(0) 推荐(0) 编辑

Linux守护进程详解(init.d和xinetd)

摘要: 一 Linux守护进程 Linux 服务器在启动时需要启动很多系统服务,它们向本地和网络用户提供了Linux的系统功能接口,直接面向应用程序和用户。提供这些服务的程序是由运行在后台的守护进程来执行的。守护进程是生存期长的一种进程。它们独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。他 阅读全文

posted @ 2018-02-23 16:24 AlanTu 阅读(2898) 评论(0) 推荐(0) 编辑

linux下的僵尸进程处理SIGCHLD信号

摘要: 什么是僵尸进程? 首先内核会释放终止进程(调用了exit系统调用)所使用的所有存储区,关闭所有打开的文件等,但内核为每一个终止子进程保存了一定量的信息。这些信息至少包括进程ID,进程的终止状态,以及该进程使用的CPU时间,所以当终止子进程的父进程调用wait或waitpid时就可以得到这些信息。 而 阅读全文

posted @ 2018-02-23 16:21 AlanTu 阅读(489) 评论(0) 推荐(0) 编辑

传输层:TCP UDP SCTP

摘要: 总图 虽然协议族被称为“TCP/IP”,但除了TCP和IP这两个主要协议外,还有许多其他成员。图2-1展示了这些协议的概况。 图2-1中同时展示了IPV4和IPV6。从右向左看该图,最右边的5个网络应用在使用IPV6,随后的6个网络应用使用IPV4。 最左边名为tcpdump的网络应用或者使用BSD 阅读全文

posted @ 2018-02-23 16:17 AlanTu 阅读(683) 评论(0) 推荐(0) 编辑

Linux下Fork与Exec使用

摘要: 一、引言 对于没有接触过Unix/Linux操作系统的人来说,fork是最难理解的概念之一:它执行一次却返回两个值。fork函数是Unix系统最杰出的成就之一,它是七十年代UNIX早期的开发者经过长期在理论和实践上的艰苦探索后取得的成果,一方面,它使操作系统在进程管理上付出了最小的代价,另一方面,又 阅读全文

posted @ 2018-02-23 16:16 AlanTu 阅读(4613) 评论(0) 推荐(1) 编辑

TCP客户/服务器简单Socket程序

摘要: 建立一个 TCP 连接时会发生下述情形: 1. 服务器必须准备好接受外来的连接。这通常通过调用 socket、bind 和 listen 这三个函数来完成,我们称之为被动打开。 2. 客户通过调用 connect 发起主动打开,这导致客户TCP发送一个SYN(同步)分节,标识希望连接的服务器端口以及 阅读全文

posted @ 2018-02-23 16:14 AlanTu 阅读(657) 评论(0) 推荐(0) 编辑

地址已经被使用 - Address already in use

摘要: 很多socket编程的初学者可能会遇到这样的问题:如果先ctrl+c结束服务器端程序的话,再次启动服务器就会出现Address already in use这个错误,或者你的程序在正常关闭服务器端socket后还是有这个问题。正如下面的这段简单的socket程序。 server.c #include 阅读全文

posted @ 2018-02-23 16:13 AlanTu 阅读(8704) 评论(0) 推荐(0) 编辑

Linux内存点滴 - 用户进程内存空间

摘要: 经常使用top命令了解进程信息,其中包括内存方面的信息。命令top帮助文档是这么解释各个字段的。VIRT , Virtual Image (kb)RES, Resident size (kb)SHR, Shared Mem size (kb)%MEM, Memory usage(kb)SWAP, S 阅读全文

posted @ 2018-02-23 16:03 AlanTu 阅读(376) 评论(0) 推荐(0) 编辑

Linux内存使用方法详细解析

摘要: 我是一名程序员,那么我在这里以一个程序员的角度来讲解Linux内存的使用。 一提到内存管理,我们头脑中闪出的两个概念,就是虚拟内存,与物理内存。这两个概念主要来自于linux内核的支持。 Linux在内存管理上份为两级,一级是线性区,类似于00c73000-00c88000,对应于虚拟内存,它实际上 阅读全文

posted @ 2018-02-23 16:02 AlanTu 阅读(1415) 评论(0) 推荐(0) 编辑

直接管理内存

摘要: C++语言定义了两个运算符来分配和释放动态内存。运算符new分配内存,delete释放new分配的内存。 相对于智能指针,使用这来年刚给运算符管理内存非常容易出错,随着我们逐步详细介绍这两个四月份,这一点会更为清楚。而且,自己直接管理内存的类与使用智能指针的类不同,它们不能依赖类对象拷贝、赋值和销毁 阅读全文

posted @ 2018-02-23 15:55 AlanTu 阅读(130) 评论(0) 推荐(0) 编辑

动态内存和智能指针

摘要: 由编译器自动分配的内存都有着严格的生存期。全局对象在程序启动时分配,在程序结束时销毁。对于局部自动对象,当我们进入其定义所在的程序块时被创建,在离开块时销毁。局部static对象在第一次使用前分配,在程序结束时销毁。 除了自动和static对象外,C++还支持动态分配对象。动态分配的对象的生存期与它 阅读全文

posted @ 2018-02-23 15:54 AlanTu 阅读(351) 评论(0) 推荐(0) 编辑

图说设计模式

摘要: 详见:http://design-patterns.readthedocs.io/zh_CN/latest/index.html 软件模式是将模式的一般概念应用于软件开发领域,即软件开发的 总体指导思路或参照样板。软件模式并非仅限于设计模式,还包括 架构模式、分析模式和过程模式等,实际上,在软件生存 阅读全文

posted @ 2018-02-23 15:51 AlanTu 阅读(1204) 评论(0) 推荐(0) 编辑

设计模式概述

摘要: 1. 设计模式 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如 阅读全文

posted @ 2018-02-23 15:45 AlanTu 阅读(697) 评论(0) 推荐(0) 编辑

Facade - 外观模式

摘要: 1. 概述 外观模式,我们通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性。例子1:一个电源总开关可以控制四盏灯、一个风扇、一台空调和一台电视机的启动和关闭。该电源总开关可以同时控制上述所有电器设备,电源总开关即为该系统的 阅读全文

posted @ 2018-02-23 15:44 AlanTu 阅读(153) 评论(0) 推荐(0) 编辑

Adapter - 适配器模式

摘要: 1. 概述: 接口的改变,是一个需要程序员们必须(虽然很不情愿)接受和处理的普遍问题。程序提供者们修改他们的代码;系统库被修正;各种程序语言以及相关库的发展和进化。 例子1:iphone4,你即可以使用UBS接口连接电脑来充电,假如只有iphone没有电脑,怎么办呢?苹果提供了iphone电源适配器 阅读全文

posted @ 2018-02-23 15:43 AlanTu 阅读(325) 评论(0) 推荐(0) 编辑

Bridge - 桥接模式

摘要: 1. 概述 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度? 例子1:设想如果要绘制矩形、圆形、椭圆、正方形,我们至少需要4个形状类,但是如果绘制的图形需要具 阅读全文

posted @ 2018-02-23 15:40 AlanTu 阅读(304) 评论(0) 推荐(0) 编辑

Factory - 工厂模式

摘要: 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的。但是在一些情况下, new操作符直接生成对象会带来一些问题。举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象之 阅读全文

posted @ 2018-02-23 15:38 AlanTu 阅读(229) 评论(0) 推荐(0) 编辑

导航