背景知识点我 1. BIO JDK5之前, JDK的IO模式只有BIO(同步阻塞)问题: 因为阻塞的存在, 需对每个请求开启一个线程. 过多的线程切换影响操作系统性能解决: 使用线程池, 处理不过来的放入队列, 再处理不过来的会触发其他机制问题: 超过线程池数量的请求需要等待 服务端1: 一个请求~ ...
分类:
其他好文 时间:
2017-04-17 21:07:18
阅读次数:
202
server: 知识点: 1) // epoll_event 结构 events 域取值 {{{#define EPOLLIN 0x001 // 连接上有数据可读,包括 tcp 连接关闭时收到 FIN 包#define EPOLLPRI 0x002 // 连接上有紧急数据可读#define EPOL ...
server: client: 知识点: 1)服务端的多线程改为select复用来处理多用户。 应该服务器瓶颈是在网络。CPU应该不是瓶颈,如果网络不是瓶颈,想再提高性能,可以考虑增加线程处理。 1.标准输入可以另用线程,从select 分离出去。 2.serverFD的accpet,也可以另用线程 ...
server: 知识点 1)FD_ISSET 只处理本文件描述符的动作。逻辑上的流程被分割到对应的文件符FD_ISSET的事件中。尽可能提高效率。 缺陷: 1)此案例中,客户端粗暴的close,会导致客户端并未接收完全的服务端的发送就被迫关闭。 应该使用shutdown来改善。 2)缓冲机制导致程序 ...
分类:
编程语言 时间:
2017-02-01 13:23:50
阅读次数:
296
服务端: 1)多线程处理客户connect。主线程,处理用户输入,二线程处理accpet,每次有新的connect,就建立新线程处理每个客户端。 2)二线程阻塞在accept,其他新线程阻塞在read。 3)当客户端close。服务端对应线程,read得到0. 之后也进行close(这一部上次实验没 ...
分类:
编程语言 时间:
2017-01-30 18:45:18
阅读次数:
303
服务端:socket->address->bind->listen->loop{accpet->read->write->close(auto socket)}->close(listen socket)1)因为是阻塞模式,所以客户端没有关闭的时候,服务端会阻塞在read函数,2)客户端发送之后断开 ...
场景: 1)客户端从服务端获取信息. 2)阻塞模式. 所以: 1)服务端,步骤,socket, addr,bind,listen, loop{accept,write,close(auto socket)},close server socket. 1.1.服务端地址必须绑定,以提供服务. 1.2. ...
1)阻塞I/O(blocking I/O) 发起请求,等待数据报准备好,拷贝数据,数据返回指令 应用程序调用一个IO函数,导致应用程序阻塞,等待数据准备好。 如果数据没有准备好,一直等待….数据准备好了,从内核拷贝到用户空间,IO函数返回成功指示。 2)非阻塞I/O (nonblocking I/O ...
分类:
其他好文 时间:
2016-09-23 19:48:47
阅读次数:
164
原文:https://segmentfault.com/a/1190000003063859 我只摘取了其中的epoll代码示例,服务端代码 ...
分类:
系统相关 时间:
2016-09-10 20:30:23
阅读次数:
265
注:本文是对众多博客的学习和总结,可能存在理解错误。请带着怀疑的眼光,同时如果有错误希望能指出。 同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的。所以先限定一下本文的上下文。 本文讨论的背景是Linux环境下的network IO。 一 ...
分类:
系统相关 时间:
2016-09-08 14:45:26
阅读次数:
203