2.3.1 协程设计原理与汇编实现coroutine

LINUX 精通 7

day23 20240908 晚19:25 - 21:30

课程链接地址

2.3.1 协程设计原理与汇编实现coroutine

  1. 目的

    协程不是某种语言特有的,lua,go都有

    ntyco 是king老师自己写的

    原语操作:"原语操作"通常指的是在编程或计算机科学中,最基本、最底层的操作或指令,这些操作通常由处理器直接执行,不需要更高级的抽象或复杂的解释。原语操作通常是构建更复杂程序和算法的基础。

    实现写成自己实现 按自己的名字仿写一遍

    不建议这章单独写成一个项目,放在------网络库里, kv存储 redis,图床项目里的网络层

dns上传域名url,返回ip

  1. 为什么有协程

    希望有同步的编程思想 贴近人, 同时有异步的性能

    比如打开零声官网,多个接口请求:详情、目录、评价、立即购买 为了知道实际应用,加深理解


async_dns_client_noblock.c

复制代码
对async_dns...这个文件编译   同步的  540行if上面改成1  -lpthread多加一个库!!!
gcc -o sync_dns  async_dns.c -lpthread
./sync_dns 执行

改if 后面0改回去 异步
gcc -o async_dns  async_dns.c -lpthread
./async_dns 执行

终端拆成两个,两种跑起来卡顿不一样

复制代码
time ./sync同步
time ./async异步  因为有getchar()连续敲两个回车  停太长时间计算不对

左:同步慢 右:异步快

why?

同步 1.436s for里发起请求 等server回答,串行

异步 0.186s for里发起请求 结果在callback 里执行,并行,可以一次性发很多请求,不用等回答再下一次请求!!!

server_mulport_epoll.c

复制代码
531 if 0
gcc -o server_mulport_epoll server_mulport_epoll.c  -lpt
hread

用2.1.3百万并发,改端口数 max_port 100

复制代码
cd 2.1.3
gcc -o mul mul.c
./mul_port_client_epoll 192.168.243.128 8080  端口从8080开始

左边先起, 建立1000条连接sockfd的耗时比较久

client没改,server改了

复制代码
if 1
gcc -o server_mulport_epoll server_mulport_epoll.c  -lpt
hread 重复上述步骤

结论:if 1 server走上面的1000左右,if0 server走下面5000-6000

因为上面:异步 检测读写分开,走的线程池,epoll_wait 检测io是否就绪; 与读写io分开 recv send,不在一个同一个线程里操作,在thread pool里!!

下面同步: 检测和读写 放一个线程里

总结 各自优劣

异步把结果放在callback里,处理完通知就行,性能高,快

client端:不只是dns请求,http请求、redis数据请求,mysql请求,mongodb请求的同步异步类似

server端:进程同一个,但是server的网页里的一堆小按钮子请求,肯定做成异步,不然太卡了, server 做到消息队列,push到任务再执行,也是一种异步,比同步快,非串行

上面是同步,适合人类思考,下面是异步快,任务检测io,callback通知处理读写,把任务压到线程池

相关推荐
索端阳5 小时前
初识 ARM Cortex-A7,嵌入式底层入门总结
汇编·嵌入式硬件
ThornArmor1 天前
重铸1996|肉体渲染:关节的裂缝:分段模型积木拼装与未成熟的 RSP 矩阵骨骼动画形变
c语言·汇编·c++·python·硬件架构·游戏机
星栖与芯1 天前
LiteOS-M 切换汇编逐行图解(1):汇编是什么·寄存器与栈
汇编·stm32·嵌入式硬件·harmonyos·鸿蒙系统
yume_sibai1 天前
11-Rust 不安全编程(unsafe 关键字 + 裸指针 + FFI + 内联汇编 + 内存安全保证)
汇编·安全·rust
小杨不想秃头3 天前
信息安全工程师 历年真题原题汇编(2016–2025)
汇编
2601_9622965112 天前
C/C++:编译全过程——预处理、编译、汇编、链接(包含预处理指令:宏定义,文件包括、条件编译)
汇编·预处理·链接·c/c++·编译过程
Freak嵌入式13 天前
Pico PIO 汇编语法深度详解:标识符、指令、伪指令全解析
汇编·stm32·单片机·嵌入式硬件·fpga开发·硬件架构
kyle~18 天前
x86 汇编LOCK前缀 --- 硬件架构向软件提供的核心同步原语
汇编·c++·性能优化·硬件架构·实时系统
典典分享指南19 天前
飞书 + 企业微信 + 微信文档多端协同实践指南
汇编·flask·intellij-idea·fastapi
极客互动API24 天前
企业微信 iPad 协议服务搭建与 AI 回调实战
网络·汇编·人工智能·微信·企业微信·ipad