
网络编程
月棠
只做一件事,并把它做好
展开
-
我读过的最好的epoll讲解--转自”知乎“
首先我们来定义流的概念,一个流可以是文件,socket,pipe等等可以进行I/O操作的内核对象。不管是文件,还是套接字,还是管道,我们都可以把他们看作流。之后我们来讨论I/O的操作,通过read,我们可以从流中读入数据;通过write,我们可以往流写入数据。现在假定一个情形,我们需要从流中读数据,但是流中还没有数据,(典型的例子为,客户端要从socket读如数据,但是服务器还没有把数据传回来...转载 2019-09-04 16:32:36 · 207 阅读 · 0 评论 -
开源软件架构 zeromq
原文链接:http://www.aosabook.org/en/zeromq.htmlØMQ是一个消息通信系统,如果你愿意的话也可以称其为“面向消息的中间件”。ØMQ的应用环境很广泛,包括金融服务、游戏开发、嵌入式系统、学术研究以及航空航天等领域。消息通信系统完成的工作基本上可看作为负责应用程序之间的即时消息通信。一个应用程序决定发送一个事件给另一个应用程序(或者多个应用程序),它...转载 2019-09-05 10:45:30 · 341 阅读 · 0 评论 -
zmq 内部结构
概述想要了解ZMQ内部结构的人越来越多,大量关于代码库的讨论经常提到的问题是缺乏一个可以让新人快速了解代码结构的架构文档。本文的目的便是提供一种这样的文档。本文会逐步覆盖整个代码库,但是不会去关注太多的细节问题。因为随着时间的推移,细节部分可能与文档脱节。如果想要获得详细信息,你应该查看相关部分的源码。首先需要提醒读者的是代码库是复杂的。从代码行数(也许是意大利面式的代码行数,...转载 2019-09-05 10:09:04 · 828 阅读 · 0 评论 -
关于多线程使用zeromq出现各种断言或段错误的问题
正如文档所说,zmq套接字不是线程安全的。应用程序端上的锁是不够的。每个套接字必须从一个线程创建、使用和关闭。那么如果实现每个套接字必须从一个线程创建、使用和关闭呢?答案是使用inproc传输在线程之间通信。例如,请参见actor模式:https://github.com/zeromq/czmq#czmq-actors 和guide: http://zguide.zeromq.org/下面列...原创 2019-04-19 11:24:35 · 2371 阅读 · 0 评论 -
ZMQ 第四章 可靠的请求-应答模式
感谢原创作者的分享!# ZMQ 第四章 可靠的请求-应答模式第三章中我们使用实例介绍了高级请求-应答模式,本章我们会讲述请求-应答模式的可靠性问题,并使用ZMQ提供的套接字类型组建起可靠的请求-应答消息系统。本章将介绍的内容有:* 客户端请求-应答* 最近最少使用队列* 心跳机制* 面向服务的队列*...转载 2018-09-29 10:54:30 · 1030 阅读 · 0 评论 -
ZeroMQ Router模式C++代码示例
//Linux下可编译通过#include <cstdio>#include <cassert>#include <thread>#include <chrono>#include <memory>#include <vector>#include <zmq.h>#include <stri...原创 2018-04-25 11:33:23 · 925 阅读 · 0 评论 -
zeromq源码分析笔记之无锁队列ypipe_t(3)
在上一篇中说到了mailbox_t的底层实际上使用了管道ypipe_t来存储命令。而ypipe_t实质上是一个无锁队列,其底层使用了yqueue_t队列,ypipe_t是对yueue_t的再包装,所以我们先来看看yqueue_t是怎么实现的。1、yqueue_tyqueue_t是一个高效的队列,高效体现在她的内存配置上,尽量少的申请内存,尽量重用将要释放的内存。其实,容器的设计都会...转载 2019-09-05 09:20:06 · 298 阅读 · 0 评论 -
zeromq源码分析笔记之线程间收发命令(2)
在zeromq源码分析笔记之架构说到了zmq的整体架构,可以看到线程间通信包括两类,一类是用于收发命令,告知对象该调用什么方法去做什么事情,命令的结构由command_t结构体确定;另一类是socket_base_t实例与session的消息通信,消息的结构由msg_t确定。命令的发送与存储是通过mailbox_t实现的,消息的发送和存储是通过pipe_t实现的,这两个结构都会详细说到...转载 2019-09-05 09:19:28 · 406 阅读 · 0 评论 -
zeromq源码分析笔记之架构(1)
1、zmq概述ZeroMQ是一种基于消息队列的多线程网络库,其对套接字类型、连接处理、帧、甚至路由的底层细节进行抽象,提供跨越多种传输协议的套接字。引用云风的话来说:ZeroMQ 并不是一个对 socket 的封装,不能用它去实现已有的网络协议。它有自己的模式,不同于更底层的点对点通讯模式。它有比 tcp 协议更高一级的协议。(当然 ZeroMQ 不一定基于 TCP 协议,它也可以用...转载 2019-09-05 09:17:26 · 273 阅读 · 0 评论 -
I/O多路复用之epoll
1、select、poll的些许缺点先回忆下select和poll的接口int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);...转载 2019-09-05 09:16:12 · 181 阅读 · 0 评论 -
I/O多路复用之poll
1、select的些许缺点回忆一下 select接口 int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);sele...转载 2019-09-05 09:14:32 · 213 阅读 · 0 评论 -
I/O多路复用之select
1、什么是I/O多路复用 关于什么是I/O多路复用,在知乎上有个很好的回答,可以参考罗志宇前辈的回答。 这里记录一下自己的理解。我认为要理解这个术语得从两方面去出发,一是:多路是个什么概念?二是:复用的什么东西?先说第一个问题。多路指的是多条独立的i/o流,i/o流可以这么理解:读是一条流(称之为读流,比如输入流),写是一条流(...转载 2019-09-05 09:13:23 · 155 阅读 · 0 评论 -
socket原理详解
1、什么是socket我们知道进程通信的方法有管道、命名管道、信号、消息队列、共享内存、信号量,这些方法都要求通信的两个进程位于同一个主机。但是如果通信双方不在同一个主机又该如何进行通信呢?在计算机网络中我们就学过了tcp/ip协议族,其实使用tcp/ip协议族就能达到我们想要的效果,如下图(图片来源于《tcp/ip协议详解卷一》第一章1.3) 、 ...转载 2019-09-05 09:12:30 · 482 阅读 · 0 评论 -
并发模型 Actor
Actor模式是一种并发模型,与另一种模型共享内存完全相反,Actor模型share nothing。所有的线程(或进程)通过消息传递的方式进行合作,这些线程(或进程)称为Actor。共享内存更适合单机多核的并发编程,而且共享带来的问题很多,编程也困难。随着多核时代和分布式系统的到来,共享模型已经不太适合并发编程,因此几十年前就已经出现的Actor模型又重新受到了人们的重视。MapRed...转载 2019-09-05 11:27:34 · 454 阅读 · 0 评论