同步IO
Linux IO的两阶段
同步, 异步, 阻塞, 非阻塞, 是网络IO中经常被提到的概念, 刚接触Tornado服务器的时候也知道Tornado是异步非阻塞的高性能web服务器, 直到最近看了一些资料才对同步异步的概念有了一些自己的想法。
HTTP协议是构建在TCP协议上的, TCP通信的底层本质上是socket的IO, 在Linux上, 以读socket为例, 数据首先到达的是内核缓冲区, 其次才会从内核缓冲区拷贝到用户进程, 所以负责通信的进程去读写socket的时候(也即recvfrom调用), 一般是两个阶段:
等待数据准备好, 此时数据暂存在内核缓冲区
数据准备好, 从内核缓冲区拷贝到用户进程
以上的两阶
继续阅读 »
Linux里的IO多路复用是有效提高IO效率的技术。主要有select、poll、epoll三种。
select
select调用的函数接口是:
int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
参数说明:
nfds: fdset中最大描述符值加1, fdset是一个位数组, 大小为__FD_SETSIZE(1024), 位数组的每一位表示该描述符是否被检查
readfds, writefds, exceptfds: 三个位数组, 非别对应监听不同类型读写及错误事件的描述符。
继续阅读 »
最近工作需要,对 WebSocket 进行了一点研究,今天在这里给大家分享一下我对 WebSocket 协议、WebSocket 的 Go 语言实现,以及 socket.io 服务端库的 Go 语言实现的理解。
WebSocket 简介
继续阅读 »
什么是对象序列化和对象反序列化
序列化是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。对象序列化和反序列化的过程就是将对象写入字节流和从字节流中读取对象的过程。将对象状态转换成字节流后,可以用java.io包中的各种I/O流类将其保存到文件中,或者应用NIO技术将其传输到另一线程中或通过网络连接将对象数据发送到另一主机。对象序列化功能非常强大,在RMI、Socket、JMS和EJB中都有应用。
继续阅读 »
文/Robin
这是「区块链技术指北」的第 61 篇文章。
本站推广
币安是全球领先的数字货币交易平台,提供比特币、以太坊、BNB 以及 USDT 交易。
币安注册: https://accounts.binancezh.pro/cn/register/?ref=11190872
邀请码: 11190872
如果对我感兴趣,想和我交流,我的微信号:Wentasy,加我时简单介绍下自己,并注明来自「区块链技术指北」,同时我会把你拉入微信群。
发现一个闪电网络应用,名叫 Lightning Scratchcard,网站链接 https://lightningscratchcard.io。
题图来自: © Guillau
继续阅读 »