本博文主要针对UNP一书中的第六章内容来聊聊I/O复用技术以及其在网络编程中的实现
1. I/O复用技术I/O多路复用是指内核一旦发现进程指定的一个或者多个I/O条件准备就绪,它就通知该进程。I/O复用适用于以下场合:(1) 当客户处理多个描述符(一般是交互式输入或网络套接字),必须适用I/O复用(2) 当一个客户处理多个套接字时,这种情况很少见,但也可能出现(3) 当一个TCP服务器既要处理监听套...
分类:
其他好文 时间:
2016-07-14 15:27:41
阅读次数:
231
Unix下可用的I/O模型一共有五种:阻塞I/O 、非阻塞I/O 、I/O复用 、信号驱动I/O 、异步I/O。此处我们主要介绍第三种I/O符复用。
I/O复用的功能:如果一个或多个I/O条件满足(输入已准备好读,或者描述字可以承接更多输出)时,我们就被通知到。这就是有select、poll、epoll实现。I/O复用应用场合:
1、当客户处理多个描述字时(一般是交互式输入和网络套接口),必须使...
分类:
其他好文 时间:
2016-06-21 07:59:43
阅读次数:
231
套接字简介:套接字是网络编程中的一种通信机制,是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程。应用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题。凭借这种机制,客户/服务器系统的开发工作既可以在本地单机上进行,也可以跨网络进行,Linux所提供的...
分类:
其他好文 时间:
2016-06-12 03:10:16
阅读次数:
254
Linux的一个应用优势是可用于设计各种高性能网络服务程序,高性能得一个特点就是实现并发访问处理,及服务程序能够同时为多个在线用户提供服务,高性能服务程序得应用非常广泛,在当前流行得Web服务器,各种游戏服务器中都能看到它的身影,而多进程网络服务程序,多线程网络服务程序,以及线程池网络服务程序的实现会更加提高网络服务的性能。高性能网络服务程序简介
高性能网络服务程序在当前的LINUX环境下应用非常...
分类:
其他好文 时间:
2016-06-12 02:32:10
阅读次数:
183
在网络编程中,一般都是多线程的编程,这就出现了一个问题:数据的同步与共享。而互斥锁和条件变量就是为了允许在线程或进程间共享数据、同步的两种最基本的组成部分。它们总能够用来同步一个进程中的多个线程。
再进入互斥锁和条件变量之前,我们先对多线程的一些相关函数进行简单介绍:多线程简单介绍和相关函数:
通常,一个进程中包括多个线程,每个线程都是CPU进行调度的基本单位,多线程可以说是在共享内存空间中并发...
分类:
其他好文 时间:
2016-06-02 14:29:23
阅读次数:
219
之前我们整理了互斥锁与条件变量问题它保证了共享资源的安全,但在多线程中我们也会经常对共享数据进行读、写操作。也就是说对某些资源的访问会 存在两种可能的情况,一种是访问必须是排查性的,就是独占的意思,这称作写操作;另一种情况就是访问方式可以是共享的,就是说可以有多个线程同时去访问某个资源,这种就称作读操作。这个问题模型是从对文件的读写操作中引申出来的。读写锁比起mutex具有更高的适用性,具有更高的并...
分类:
其他好文 时间:
2016-06-02 14:05:02
阅读次数:
263
最近干活的时候又被Linux管道和消息队列搞的一脸懵逼。当初自己走马观花似的学习以为内容很简单,结果留下了大坑,借来Unix网络编程来补补,重新审视这两个部分,并且引以为戒!!!
首先看管道#include
int pipe(int fd[2]);返回:成功为0,出错为1,两个文件描述符fd[0]用来读,fd[1]用来写
灵魂作图...
分类:
系统相关 时间:
2016-06-01 01:42:16
阅读次数:
270