网络编程
文章平均质量分 79
For_zwb
虚心万事能成;自满十事九空。
展开
-
当一个用户访问服务器延迟很高如何优化系统
对问题进行思考定位分析:当一个用户访问服务器延迟很高,可能的原因有哪些?服务器系统能力不足: 当用户量上升时导致服务器提供服务能力下降,数据处理时间冗余,导致用户延迟。网络问题:是否因为用户距离服务器部署地的网络延迟很高,导致在链路上产生了延迟。解决问题:1. 服务器的系统能力不足:(1): 需要分析系统的瓶颈在哪?一般系统的瓶颈都在于IO问题上和并发处理请求上。最大的问题可能都是在于IO阻塞。这里就需要去分析和解决IO阻塞的问题,像现在常用的模型都是用协程去处理耗时的IO操作提高并发处理I原创 2021-08-23 17:37:33 · 1326 阅读 · 0 评论 -
记epoll_data_t中ptr使用的坑
先看一下epoll_data_t的结构typedef union epoll_data { void *ptr; int fd; uint32_t u32; uint64_t u64;} epoll_data_t;struct epoll_event { uint32_t events; /* Epoll events */ epoll_data_t data; /* Us...原创 2020-04-09 18:22:29 · 1137 阅读 · 0 评论 -
epoll et模式下的web服务器用webbench压测导致epoll_wait阻塞不返回
半个月前动手写了web服务器用webbench进行压测导致epoll_wait阻塞不返回,一直查bug历经很长时间才查出,总结一下踩到的坑点…web服务器框架简述采用reactor模型,主线程调用epoll进行监听,分发给线程池进行解析,IO事件由主线程进行发送。采用epoll ET工作模式。分析bugET工作模式注意的事项点我,这是之前总结的在写代码需要注意的事项,并且和LT模式在...原创 2020-01-12 12:33:01 · 686 阅读 · 0 评论 -
I/O多路复用之epoll
Linux网络编程—多路复用之epollepoll 是多路复用select和poll的加强版,epoll到底强在了哪些地方,我们接下来就会谈到。 我们先简单说一下select和poll的不足之处select的缺点: 1、单个进程能够监视的文件描述符的数量存在最大限制,通常是1024,当然可以更改数量,但由于select采用轮询的方式扫描文件描述符,文件描述符数量越多,性能越差。 2...原创 2018-08-19 23:18:10 · 328 阅读 · 0 评论 -
listen函数及其backlog参数的含义及实验验证
listen函数仅由TCP服务器调用,它做两件事情(1)当socket函数创建一个套接字时,它被假设为一个主动套接字,也就是说,它是一个将调用connect发起连接的客户套接字。listen函数把一个未连接的套接字转换成一个被动套接字,指示内核应接受指向该套接字的连接请求。调用listen导致套接字从CLOSED状态转换到LISTEN状态。(2)本函数的第二个参数规定了内核应该为响应套接字排队...原创 2019-12-28 17:03:41 · 747 阅读 · 0 评论 -
非阻塞connect详解
我们先来讲connect函数(本文针对的是TCP)#include<sys/socket.h>int connect(int sockfd, const struct sockaddr* servaddr, socklen_t addrlen);参数大家应该都知道,我在这里提一下,为什么第二个参数要用 struct sockaddr*?这是因为ANSI C标准为我们定义了一...原创 2019-10-28 16:05:24 · 1239 阅读 · 0 评论 -
定时器详解(定时器链表、时间轮、时间堆)
定时器(linux)网络程序需要处理定时事件,比如定期检测一个客户连接的活动状态。服务器通常管理着众多定时事件,因此有效的组织这些定时事件,使之能在预期的时间点被触发且不影响服务器的主要逻辑,对于服务器性能有着至关重要的影响。为此我们要将每个定时事件分别封装成定时器,并使用某种容器类数据结构,比如链表、排序链表和时间轮,将所有定时器串联起来,以实现对定时事件的统一管理。LINUX提供了三种定时...原创 2019-09-19 21:13:37 · 2174 阅读 · 1 评论 -
统一事件源
统一事件源事件源1.定时器的超时事件(本质上依靠信号SIGALARM)2.信号3.数据读4.数据写5.网络异常信号是一种异步事件:信号处理函数和程序的主循环是两条不同的执行线路。很显然,信号处理函数需要尽可能快地执行完毕,以确保该信号不被屏蔽太久。一种典型的解决方案是:把信号的主要处理逻辑放到程序的主循环中,当信号处理函数被触发时,它只是简单地通过通知主程序接受到的信号,并把信号传递...原创 2019-09-16 22:55:00 · 364 阅读 · 0 评论 -
epoll中ET与LT工作模式
epoll的基本概念和函数当我们采用I/O复用函数时(select, poll, epoll),我们都将套接字设置为非阻塞的。man 2 select[BUGS]:Under Linux, select() may report a socket file descriptor as “ready forreading”, while nevertheless a subsequent r...原创 2019-09-12 15:55:55 · 429 阅读 · 0 评论 -
EPOLLONESHOT事件
我们先从epoll谈起可以看看之前我的博客EPOLLONESHOT事件我们使用ET模式下工作,一个socket上的某个事件还是可能被多次触发。这在并发程序中就会引起一个问题。比如一个线程(或进程)在读取完某个socket上的数据后开始处理这些数据,而在数据处理的过程中该socket上又有新数据可读(EPOLLIN再次触发),此时另外一个线程被唤醒来读取这些新的数据。于是就出现了两个或多个线程...原创 2019-09-12 15:23:04 · 598 阅读 · 0 评论 -
TCP三次握手四次挥手及time_wait状态解析
TCP的建立——三次握手1.服务器必须准备好接受外来的连接。通常通过调用socket,bind,listen这三个函数来完成,我们称之为被动打开(passive open)。2. 客户端通过调用connect函数发起主动的打开(active open)。这导致客户TCP发送一个SYN(同步)分节,它告诉服务器客户将在(待建立的)连接中发送的数据的初始序列号。通常SYN分节不携带任何数据,其所...原创 2019-03-19 12:06:40 · 1799 阅读 · 0 评论 -
OSI模型中各层在通信中的作用
7层通信在七层osi模型中是如何实现通信的呢。参考上图。首先,发送方从第七层(应用层)到第一层由上至下发送数据,而接收端刚好相反从下至上接收数据。发送端再处理上一层传过来的数据时可以附上当前分层的协议所必须的“首部”信息。接收端对收到的数据进行数据“首部”与“内容”的分离,再转发给上一层,并最终将发送端的数据恢复为原状。应用层假设A要给B发送一个邮件,发送的邮件分为两部分,一部分是内容,...原创 2018-12-24 12:22:01 · 1229 阅读 · 0 评论