说透IO多路复用模型
在说IO多路复用模型之前,我们先来大致了解下Linux文件系统。在Linux系统中,不论是你的鼠标,键盘,还是打印机,甚至于连接到本机的socket client端,都是以文件描述符的形式存在于系统中,诸如此类,等等等等,所以可以这么说,一切皆文件。来看一下系统定义的文件描述符说明:
IO多路复用(二) -- select、poll、epoll实现TCP反射程序
接着上文IO多路复用(一)-- Select、Poll、Epoll,接下来将演示一个TCP回射程序,源代码来自于该博文[链接],在这里将其进行了整合,突出select、poll和epoll不同方法之间的比较,但是代码的结构相同,为了突出方法之间的差别,可能有的代码改动的并不合理,实际中使用并非这么写。
2018-09-14
聊聊netty的ResourceLeakDetector
netty-common-4.1.33.Final-sources.jar!/io/netty/util/ResourceLeakDetector.java
【PHP+nginx+php-fpm】的运行机制和原理
1、PHP+nginx+php-fpm的运行机制和原理 {代码...} 总结: 1、nginx和php-fpm都是多进程,一个进程只有一个线程; 2、nginx一个线程是非阻塞/io多路复用/epoll模型,将请求分发后无需等待,仅监听回调结果 3、php-fpm一个线程是阻塞模型,必须等待该客户端请求php服务端返回数据,下一个nginx发过来的请求才能被受理 4、P...
2020-05-18
Node - 异步IO和事件循环
学习Node就绕不开异步IO, 异步IO又与事件循环息息相关, 而关于这一块一直没有仔细去了解整理过, 刚好最近在做项目的时候, 有了一些思考就记录了下来, 希望能尽量将这一块的知识整理清楚, 如有错误, 请指点轻喷~~
2019-05-04
基于tornado的web ssh项目
上次有幸观看梁胜大牛的技术分享,其中一个演示是浏览器中显示了一个linux终端并登录管理server,于是决定自己实现一个 github中有一个项目gateone实现了此功能,本来想学习一下,但是考虑到代码实在过多就放弃了,下面说下自己的实现。
带你手把手重读 Handler 源码,聊聊那些你所不知道一二三
大家应该都知道,Android 的消息机制是基于 Handler 实现的。还记得一年前的自己就看了几篇博客,知道了 Handler、Looper、MessageQueue 就自以为了解了 Handler 的原理。但其实看源码的过程中慢慢就会发现,Handler 的内容可不止这点, 像同步屏障、 Handler 的 native 层的阻塞唤醒机制等等这些知识以前就没有理解清楚...
2019-12-02
Node.js中Event_pool的使用场景
众所周知Node是单线程异步,其实这个是相对于Node这层来说是没有问题的。但是如果整体来看其实还是有个thread_pool的概念,我更喜欢把Node看做一个胶水层,把libuv与v8粘合在一起。v8作为js执行的引擎,libuv封装了一些c++代码来实现一些内核调用,同时把同类功能接口做抽象,满足跨平台的需求。我觉得写Node有两条主线...
2017-06-22
IO模型
一:IO简介Unix(like)中,一切皆文件。Socket、FIFO、管道、终端都是文件,一切都是流。在信息交换的过程中,实际都是对这些流进行的数据收发操作,简称I/O操作(系统调用read、write)。而流有很多,于是就用文件描述符(fd)来区分具体是哪个流。For example,我们创建了一个socket,系统调用会返回一个fd,对socket...
2018-04-08
从linux内核理解Java怎样实现Socket通信
前段时间买本书研究了 TCP/IP 通信,弄清楚了计算机之间是怎么通信的。网络通信的的基础就是 TCP/IP 协议簇,也被称为 TCP/IP 协议栈 ,也被简称为 TCP/IP 协议。 TCP/IP 协议 并不是只有 TCP 和 IP 协议,只是这俩用的比较多,就用这两个起的名字。
Day 15:Meteor —— 从零开始创建一个 Web 应用
到目前为止我们讨论了Bower、AngularJS、GruntJS和PhoneGap等JavaScript技术。今天是“30天学习30种新技术”挑战的第15天,我决定重返JavaScript,学习Meteor框架。虽然Meteor的文档相当好,但是它缺少为初学者准备的教程。我觉得教程的学习效果更好,因为教程可以帮助你快速上手一种技术。本文将介绍如何利用 Meteor 框架...
高性能服务器开发基础系列 (二)Reactor模式
系列目录 第01篇 主线程与工作线程的分工 第02篇 Reactor模式 第03篇 一个服务器程序的架构介绍 第04篇 如何将socket设置为非阻塞模式 第05篇 如何编写高性能日志 第06篇 关于网络编程的一些实用技巧和细节 第07篇 开源一款即时通讯软件的源码 第08篇 高性能服务器架构设计总结1 第09篇 高性能服务器架构设计总结2 第10...
2018-05-23
惊群问题及解决
当多个进程/线程同时等待同一个socket的事件,当事件发生时,多个进程/线程同时被唤醒,但只有一个进程/线程响应处理该事件,其他被唤醒的进程/线程重新休眠,这种情况称为惊群。
2017-11-14
golang server epoll client 使用连接池 15万+ qps
50万个请求,连接池使用2000连接,发送 "test" 服务端接受后 转成大写返回,处理完所有的请求耗时3.731506996s,性能很强大(注意:需要在linux环境下测试)
【架构—基本功】操作系统
下表列出了缓冲I/O和直接I/O的API接口列表,缓冲I/O是C语言提供的库函数,均以f打头;直接I/O是Linux的系统API,也是C语言编写的,但在原理上两者差异很大。
2020-04-04
select连接数限制 poll epoll没有
fd_set结构体的定义实际包含的是fds_bits位数组,其大小固定,由FD_SETSIZE指定(/usr/include/bits/typesizes.h中),在当前内核中数值为1024,可见每次select系统调用可监听处理的文件描述符最大数量为1024。poll 是链表 理论增长没问题epoll 是个红黑树,扩展树叶也没问题
2021-01-06
基本网络编程范式
总结一下这一段时间来,有关网络编程的学习。我是从csapp的最后章节的Tiny HTTP服务器开始,以它为基础,改用不同的方式实现并发,包括进程、线程、线程池、I/O多路复用。所有代码见地址:[链接]
2016-07-08