文章分类 -  四、高性能网络设计

摘要:Reactor 翻译过来的意思是「反应堆」,可能大家会联想到物理学里的核反应堆,实际上并不是的这个意思。 这里的反应指的是「对事件反应」,也就是来了一个事件,Reactor 就有相对应的反应/响应。 事实上,Reactor 模式也叫 Dispatcher 模式,我觉得这个名字更贴合该模式的含义,即  阅读全文
posted @ 2023-05-19 17:38 zwj鹿港小镇 阅读(100) 评论(0) 推荐(0) 编辑
摘要:一、epoll基础数据结构 struct eventpoll { // ... struct rb_root rbr; // 管理 epoll 监听的事件 struct list_head rdllist; // 保存着 epoll_wait 返回满⾜条件的事件 // ... }; struct e 阅读全文
posted @ 2021-03-21 09:28 zwj鹿港小镇 阅读(0) 评论(0) 推荐(0) 编辑
摘要:一、阻塞在哪里? 阻塞在网络线程。 二、什么来决定阻塞还是非阻塞? 默认情况下,IO是阻塞的,要调用下面函数来获取或设置阻塞状态。 fcntl(sockfd, F_SETFL, O_NONBLOCK); 如果是阻塞模型,那么当调用sockefd对用的read、write、accept、connect 阅读全文
posted @ 2021-03-20 23:19 zwj鹿港小镇 阅读(1) 评论(0) 推荐(0) 编辑
摘要:一、网络编程关注的问题 (1)建立连接。(2)断开连接。(3)消息到达。(4)消息发送完毕。 二、⽹络编程流程 注意:当用户调用read和write等系统调用函数时,用户空间和内核空间之间的切换如下: 二、IO多路复⽤(⽹络线程) 注意:IO阻塞和非阻塞在下一节会具体有说明 阅读全文
posted @ 2021-03-19 00:09 zwj鹿港小镇 阅读(0) 评论(0) 推荐(0) 编辑
摘要:一、服务器并发量 是指同时承载(能够处理业务)客户端的数量,注意,服务器连接客户端的数量之和并不叫做并发量,这些客户端还必须能够正常的处理业务。 二、模拟实现百万并发服务器 (1)代码部分 服务器代码: #include <stdio.h> #include <stdlib.h> #include 阅读全文
posted @ 2021-03-18 00:08 zwj鹿港小镇 阅读(2) 评论(0) 推荐(0) 编辑
摘要:一、阻塞模式 Windows套接字在阻塞和非阻塞两种模式下执行I/O操作。在阻塞模式下,在I/O操作完成前,执行的操作函数一直等候而不会立即返回,该函数所在的线程会阻塞在这里。相反,在非阻塞模式下,套接字函数会立即返回,而不管I/O是否完成,该函数所在的线程会继续运行。 当调用recv()函数时,系 阅读全文
posted @ 2021-03-17 23:06 zwj鹿港小镇 阅读(472) 评论(0) 推荐(0) 编辑
摘要:一、为什么需要 WebSocket 初次接触 WebSocket 的人,都会问同样的问题:我们已经有了 HTTP 协议,为什么还需要另一个协议?它能带来什么好处? 答案很简单,因为 HTTP 协议有一个缺陷:通信只能由客户端发起。 举例来说,我们想了解今天的天气,只能是客户端向服务器发出请求,服务器 阅读全文
posted @ 2021-03-12 22:54 zwj鹿港小镇 阅读(48) 评论(0) 推荐(0) 编辑
摘要:1、单线程reactor 参考源码:libevent或者redis 2、多线程reactor 参考源码:memcached 这种模式又分为2种: (1)多个worker,每个线程都一样,不区分main线程和worker线程。 (2) 一个主线程master(处理accept),其他线程都是worde 阅读全文
posted @ 2021-03-07 23:38 zwj鹿港小镇 阅读(53) 评论(0) 推荐(0) 编辑
摘要:一、惊群效应简介 当你往一群鸽子中间扔一块食物,虽然最终只有一个鸽子抢到食物,但所有鸽子都会被惊动来争夺,没有抢到食物的鸽子只好回去继续睡觉, 等待下一块食物到来。这样,每扔一块食物,都会惊动所有的鸽子,即为惊群。 简单地说:就是扔一块食物,所有鸽子来抢,但最终只一个鸽子抢到了食物。 语义分析:食物 阅读全文
posted @ 2021-03-07 17:11 zwj鹿港小镇 阅读(228) 评论(0) 推荐(0) 编辑
摘要:一、LT和ET的区别 ET是一次事件只会触发一次,如一次客户端发来消息,fd可读,epoll_wait返回.等下次再调用epoll_wait则不会返回了。 LT是一次事件会触发多次,如一次客户端发消息,fd可读,epoll_wait返回,不处理这个fd,再次调用epoll_wait,立刻返回。 阅读全文
posted @ 2021-03-06 16:44 zwj鹿港小镇 阅读(746) 评论(0) 推荐(0) 编辑
摘要:一、下图为客户端和服务器之间建立TCP连接的过程 我们可以看到对应有2个队列: (1):未完成队列:每个这样的SYN分节对应其中一项,已有某个客户端发出并到达服务器,而服务器正在等待完成相应的TCP三路握手过程。这些套接口处于SYN_RCVD (2):已完成队列:每个已经完成TCP三路握手过程的客户 阅读全文
posted @ 2021-03-04 22:45 zwj鹿港小镇 阅读(458) 评论(0) 推荐(0) 编辑
摘要:一、初级版本 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/poll.h> #include <sys/epoll.h> #include <sys/socke 阅读全文
posted @ 2021-02-12 14:28 zwj鹿港小镇 阅读(85) 评论(0) 推荐(0) 编辑
摘要:#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/poll.h> #include <sys/socket.h> #include <netinet/tcp.h> 阅读全文
posted @ 2021-02-12 13:43 zwj鹿港小镇 阅读(59) 评论(0) 推荐(0) 编辑
摘要:1.select: select本质上是通过设置或者检查存放fd标志位的数据结构数据结构来进行下一步的处理,时间复杂度:O(n) 缺点: 1)、每次调用select,都需要把fd集合从用户态拷贝到内核态,这个开销在fd很多时会很大; 2)、同时每次调用select都需要在内核遍历传递进来的所有fd, 阅读全文
posted @ 2021-02-12 13:37 zwj鹿港小镇 阅读(336) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示