服务器解构为三个主要模块:
IO处理单元。四种IO模型和两种高效事件处理模式。
逻辑单元。两种高效并发模式。
存储单元。(暂不讨论)
1.服务器模型(1)C/S (客户端/服务器)模型
C/S模型的逻辑很简单。服务器启动后,首先创建一个或者多个监听socket,并调用bind函数将其绑定到服务器感兴趣的端口上,然后调用listen函数等待客户连接。服务器稳定运行后,客户端就可以调用Connect...
分类:
其他好文 时间:
2016-07-19 10:39:18
阅读次数:
161
IO的理解 IO操作的两个阶段: 第一个阶段: 查看数据是否就绪; 第二个阶段: 进行数据拷贝(内核将数据拷贝到用户线程)。 同步IO:当用户线程发出IO请求操作之后,如果数据没有就绪,需要通过用户线程或者内核不断地去轮询数据是否就绪,当数据就绪时,再将数据从内核拷贝到用户线程; 异步IO:只有IO ...
分类:
其他好文 时间:
2016-07-18 12:54:18
阅读次数:
245
IO模型什么是IO?IO:input和output的缩写,即输入/输出端口。每个设备都会有一个专用的I/O地址,用来处理自己的输入输出信息同步、异步、阻塞、非阻塞同步和异步的概念描述的是用户线程与内核的交互方式:同步是指用户线程发起IO请求后需要等待或者轮询内核IO操作完成后才能继续执行;而异步是指... ...
分类:
其他好文 时间:
2016-07-16 00:06:41
阅读次数:
452
1.I/O基础知识 1.1 什么是文件描述符? 在网络中,一个socket对象就是1个文件描述符,在文件中,1个文件句柄(即file对象)就是1个文件描述符。其实可以理解为就是一个“指针”或“句柄”,指向1个socket或file对象,当file或socket发生改变时,这个对象对应的文件描述符,也 ...
分类:
编程语言 时间:
2016-07-12 11:54:54
阅读次数:
224
Unix/Linux上的五种IO模型(UNP6.2) IO多路复用一般不能和blocking IO用在一起,因为blocking IO中read() write() accept() connect()都有可能阻塞当前线程,这样线程就没办法处理其他socket上的IO事件了 non-blocking ...
分类:
其他好文 时间:
2016-07-02 17:25:42
阅读次数:
189
一、关于select,poll,epoll三种IO模型,都属于多路IO就绪通知,提供了对大量文件描述符就绪检查的高性能方案,只不过实现方式有所不同:select原理概述:调用select时,会发生以下事情:(1)从用户空间拷贝fd_set到内核空间;(2)注册回调函数__pollwait;(3)遍历所有fd,..
分类:
其他好文 时间:
2016-06-28 00:53:21
阅读次数:
223
之所以称其为select模型是因为它主要是使用select函数来管理I/O的。这个模型的设计源于UNIX系统,目的是允许那些想要避免在套接字调用上阻塞的应用程序有能力管理多个套接字。 int select( int nfds, // 忽略,仅是为了与Berkeley套接字兼容 fd_set* rea ...
关于网络IO的模型涉及到的阻塞、非阻塞、同步、异步真的是让人一头雾水啊。 首先要了解需求,这个IO模型能够解决什么问题,在我理解就是,当应用程序要使用系统资源,但是这个资源又被占用的时候应该怎么办。比如说你去餐馆,可是菜又没有好,你该怎么办。 首先要明白的就是应用程序使用系统资源的一个过程,主要有两 ...
分类:
其他好文 时间:
2016-06-22 01:38:03
阅读次数:
216
在学习异步IO模型前,先来了解协程 协程又叫做微线程,Coroutine 子程序或者成为函数,在所有语言中都是层级调用,比如a调用b,b调用c。c执行完毕返回,b执行完毕返回,最后a执行完毕返回 所以子程序是通过栈来实现的,一个线程就是执行一个子程序 子程序调用总是一个入口一次返回,调用顺序是明确的 ...
分类:
编程语言 时间:
2016-06-14 13:52:34
阅读次数:
232
(一)首先,介绍几种常见的I/O模型及其区别,如下: blocking I/O nonblocking I/O I/O multiplexing (select and poll) signal driven I/O (SIGIO) asynchronous I/O (the POSIX aio_f ...
分类:
其他好文 时间:
2016-06-14 11:58:01
阅读次数:
218