网络
文章平均质量分 85
birate_小小人生
专注,自信,坚持
展开
-
UDP的可靠性传输
文章目录UDP和TCP的区别为什么要使用UDP传输可靠性数据如何使用UDP传输可靠性数据UDP和TCP的区别Tcp和udp都是属于TCP/IP协议(传输层协议)。TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。 一个TCP连接必须要经过三次握手,断开连接时需要四次挥手。TCP的可靠性主要体现在什么方面呢?1. 应用数据被分割成TCP认为最合适发送的数据块。这个和UDP完全不同,应用程序将产生的数原创 2021-11-24 23:54:52 · 3089 阅读 · 0 评论 -
简谈epoll
文章目录I/O编程关注的问题阻塞io模型和⾮阻塞io模型I/O多路复用epoll的API主要函数epoll的两种触发方式epoll与select、poll的对比epoll更高效的原因I/O编程关注的问题epoll我们经常使用在网络编程I/O模型中,在此模型中我们主要关注的问题点是连接如何建立,连接何时断开,消息如何到达,消息是否发送完毕。 用户空间监测内核的消息得到这个结果。在上图的蓝色框中,我们主要的关注的是读写是否被阻塞,数据是否达到,到达了怎么通知给用户空间。推荐免费的直播课程: https原创 2021-11-20 22:27:58 · 4363 阅读 · 1 评论 -
libgo的上下文切换
在 libgo 的上下文切换上,并没有自己去实现创建和维护栈空间、保存和切换 CPU 寄存器执行状态信息等的任务,而是直接使用了 Boost.Context。Boost.Context 作为众多协程底层支持库,性能方面一直在被优化。Boost.Context所做的工作,就是在传统的线程环境中可以保存当前执行的抽象状态信息(栈空间、栈指针、CPU寄存器和状态寄存器、IP指令指针),然后暂停当前的执行状态,程序的执行流程跳转到其他位置继续执行,这个基础构建可以用于开辟用户态的线程,从而构建出更加高级的协程等原创 2021-05-16 23:49:55 · 789 阅读 · 0 评论 -
libgo的协程调度分析
libgo1. libgo协程2. 调度器3. 协程执行器执行器对协程的调度4. 协程任务Task1. libgo协程libgo中的有调度器(scheduler) 和执行器(processer)的概念:调度器主要用于创建执行器(支持动态扩展),对调度器而言,每个执行器是一个单独的线程,调度器做的最主要的工作,就是平衡各个执行器中的协程数量,防止饥饿效应,部分执行器过忙,部分执行器却没有task可执行,另外,如果某个执行器卡住,调度器也会将执行器中的可运行协程取出,放到负载最低的执行器上。直接负责线原创 2021-05-16 23:05:02 · 995 阅读 · 1 评论 -
libgo的简介
libgo背景源码背景今天谈谈比较热门的协程框架libgo, 其实和腾讯微信后台的协程库libco相比,libgo的性能大大超过libco,下图是从协程的各个角度相比。源码libgo源码https://github.com/yyzybb537/libgo或https://gitee.com/yyzybb537/libgollibgo的目录结构说明:w@w:~/wz/libgo/libgo$ ls -l total 52drwx------ 2 w w 4096 4月 24 21:原创 2021-05-16 14:56:58 · 2840 阅读 · 0 评论 -
NtyCo协程的性能测试
先看一张图右上图是服务器, 下面两张图是客户端,我们可以看到cpu的利用率快接近90%,说明协程的利用率是很高的,虚拟机的内存只有4G,导致连接数到达26w的时候基本就会崩掉。服务器代码:server客户端代码:client跑的时候需要预先设置一些参数才可以,具体可查看:TCP百万并发之参数设置...原创 2021-05-09 16:25:15 · 153 阅读 · 0 评论 -
Ntyco协程之间调度的实现
Ntyco调度器的实现协程的运行状态调度器的运行状态协程如何被调度1.生产者消费者模式2. 多状态下运行我们来思考个问题。协程的运行状态包含{就绪,睡眠,等待},运行体回调函数,回调参数,栈指针,栈大小,当前运行体。调度器的运行状态包含{就绪,睡眠,等待},一个运行体如何高效地在多种状态集合更换。 调度器与运行体的功能界限。协程的运行状态新创建的协程, 创建完成后, 加入到就绪集合, 等待调度器的调度;TAILQ_INSERT_TAIL(&co->sched->ready,原创 2021-05-08 23:13:48 · 307 阅读 · 0 评论 -
基于NtyCo的协程使用和API
NtyCo的使用和API1. NtyCo的工作流程1. 创建协程NtyCo的源码路径:NtyCo源码1. NtyCo的工作流程1. 创建协程当我们需要异步调用的时候,我们会创建一个协程。比如 accept 返回一个新的sockfd,创建一个客户端处理的子过程。 再比如需要监听多个端口的时候,创建一个 server的子过程,这样多个端口同时工作的,是符合微服务的架构的。创建协程的时候, 进行了如何的工作? 创建 API 如下:int nty_coroutine_create(nty_corouti原创 2021-05-08 17:21:51 · 433 阅读 · 0 评论 -
协程的原理
@[TOC] 协程原创 2021-05-06 22:58:46 · 8887 阅读 · 0 评论 -
Linux网络编程的基础API总结
1. socket API先理解主机字节序和网络字节序:我们都知道不同的操作系统分为大端地址(高字节存低地址)和小端地址(高字节存高地址,低字节存低地址)。小端字节序:主机字节序大端字节序:网络字节序区分大端和小端code:void byteorder() { union{ int value; char union_bytes[sizeof(int)]; }test; test.value = 0x0102; if((test.union_bytes[0]=原创 2021-03-21 22:27:26 · 226 阅读 · 0 评论 -
TCP百万并发之参数设置
要想服务器能够支持百万个client的连接,我们要知道,是什么会限制服务器连接的数量。这里我们需要搞清楚这几个问题;操作系统能否支持百万连接?操作系统维持百万连接需要多少内存?1. 操作系统能否支持百万连接?大多数的操作系统是不能达到百万级别的连接,是因为系统参数限制了这一操作,达到数十万以及数百万的连接的时候,会大量地消耗操作系统的资源。但是我们可以修改。全局修改我们使用cat /proc/sys/fs/file-nr,查看全局最大文件打开数Max open files.我们可以看到第原创 2021-03-15 23:40:44 · 1156 阅读 · 0 评论