- 浏览: 65264 次
- 性别:
- 来自: 深圳
最新评论
文章列表
为什么TCP不可靠
原文在此
这篇文章是关于TCP网络编程的一个不起眼的小问题。几乎人人都并不太明白这个问题是怎么回事。曾经我以为我已经理解了,但在上周,我才发现我没有理解。
所以我决定在网络上搜索并咨询专家,希望他们留下他们智慧的轨迹从而一劳永逸,希望可以为这个主题画上休止符。
简介
朱迪树是什么?
朱迪树,或朱迪数组(judy trie/array/tree)是一种对内存使用率和CPU高速缓存命中率进行优化的trie树。与哈希表,二叉树(包括红黑树等),B-树等相比占用更少的内存,同时又具有很高的运行效率,在某些情况下 ...
Berkeley 套接字(BSD)是所有网络通信共同使用的API。建立于20世纪80年代初期,它是TCP /
IP协议族的原始实现,是目前任何操作系统广泛支持的必备组件。大部分人都很熟悉BSD 套接字中的对等连接,这需要显式的建立,断开,选择运输协议(TCP,UDP),错误处理,等等。当这些工作完成时,你就来到了应用层协议(例如 HTTP)的世界,这时你需要额外的数据格式(frame),缓冲,以及处理逻辑。这也难怪一个高性能的网络应用程序并不容易编写。
如果我们可以将诸如不同的套接字类型,连接处理,数据格式,甚至是路由等低级别的细节抽象出来岂不是会更好?这就是 ZeroMQ (ØMQ/ ZM ...
部分翻译自www.zeromq.org/whitepapers:architecture
概述
想要了解ZMQ内部结构的人越来越多,大量关于代码库的讨论经常提到的问题是缺乏一个可以让新人快速了解代码结构的架构文档。
本文的目的便是提供一种这样的文档。本文会 ...
翻译自http://wiki.apache.org/hadoop/Hbase/SecondaryIndexing
本文是关于实现HBase辅助索引不同方法的设计文档。
使用Coprocessor实现最终一致性的辅助索引
基本的想法是为主表中的每个索引建立一个额外的辅助表。为列族(family)添加coprocessor,并利用coprocessor处理列族上(或指定的列)的辅助索引。用WAL(write ahead log)来保证持久性,并使用共享队列保证辅助索引的更新在调用者看来是异步的。通常HBase的时间戳可以决绝所有的解决,并且可以保证操作是幂等的(多 ...
f_ops.poll和wait_queue
poll/select/epoll的实现都是基于文件提供的poll方法(f_op->poll),该方法利用poll_table提供的_qproc方法向文件内部事件掩码_key对应的的一个或多个等待队列(wait_queue_head_t)上添加包含唤醒函数(wait_queue_t.func)的节点(wait_queue_t),并检查文件当前就绪的状态返回给poll的调用者(依赖于文件的实现)。当文件的状态发生改变时(例如网络数据包到达),文件就会遍历事件对应的等待队列并调用回调函数(wait_queue_t.func)唤醒等待线程。
通常的 ...
昨日与某老汉聊天, 给我分享了一些机器学习相关内容,受益匪浅。老汉问我有关分支预测的问题,我解释得天马星空,貌似老汉已被误导,故今日撰写此文以理清逻辑。实际上分支预测这个词在N年前(N<3)在读深入理 ...
hadoop.ipc和RPC简介
hadoop 和hbase中的大部分服务都是通过hadoop.ipt.RPC这个类来实现的。
hadoop.ipc.RPC 实现了一种远程过程调用的框架,应用可以直接定义过程调用的协议接口和协议的server端实现,就可以直接通过RPC框架获得RPC server和client端的接口代理。
hadoop.ipc.RPC 的实现利用了 hadoop.ipc.Server 和 hadoop.ipc.Client这两个类, 这两个类实现了网络中非常典型的Request-Response模式服务器和客户端框架。用户可以通过定义一个协议接口并实现出R ...
LeaderFollower模式是一种高效的多线程IO多路分离和调度模式。
http://www.kircher-schwanninger.de/michael/publications/lf.pdf
实现高性能的多线程应用程序是具有挑战性的任务,Leader Follower主要解决了以下几个方面的问题:
1. 有效复用IO句柄 ...
cherokee 服务器的绝大部分功能都是用插件实现的, 因此要理解cherokee的源码首先需要理解的就是cherokee的插件.
插件相关的主要结构体有以下几个.
// 插件, 对应于每个插件
typedef struct {
cherokee_plugin_type_t type;
void *instance;
void *configure;
const char *name;
} cherokee_plugin_info_t ...