- 博客(36)
- 收藏
- 关注
原创 2.3.1 协程设计原理与汇编实现coroutine 2
然后再封装switch,到send recv里面检查可不可行,可以switch,async就是在send recv前检查可不可以send recv。setjump(1)这里ret=1, func(1), arg2 longjump2。栈大小取决于业务量 ctx[0] ctx[1]互相存储!setjump返回ret=0, func(0) arg1 longjump1。context上下文, 入口func1,2,定义栈顶stack1。异步的实现,但是变成逻辑变成右上角同步的感觉,但实际还是异步!
2024-09-09 10:30:05
349
原创 2.3.1 协程设计原理与汇编实现coroutine
client端:不只是dns请求,http请求、redis数据请求,mysql请求,mongodb请求的同步异步类似server端:进程同一个,但是server的网页里的一堆小按钮子请求,肯定做成异步,不然太卡了, server 做到消息队列,push到任务再执行,也是一种异步,比同步快,非串行上面是同步,适合人类思考,下面是异步快,任务检测io,callback通知处理读写,把任务压到线程池。
2024-09-09 10:28:23
978
原创 2.2.3 UDP的可靠传输协议QUIC 1
跳了,没有listen accept 用recvfrom获取data 发送方ip+port。darren老师 这个好多啊2:47 3个小时 这里有课件pdf 看official code。tcp不用应用层再次编号:已经有32位序列号+确认号, udp没有。比如sendto(hello) sendto(darren)自动重传请求 automatic repeat request。流量控制: 很好理解!如果报文空间不够,可能会丢包。慢开始,快恢复 粗略了解。滑动窗口 拥塞控制。
2024-09-07 08:56:38
521
1
原创 2.2.2 Posix API与网络协议栈 3
(peer - to -peer去中心,点对点, 绕开网络快):双方close以后同时建立连接,握手, 没有client server双方平等。与posix api关系,调用了close() ,不是网络的函数,是fd文件系统的函数。可能的,先fin_wait1-ack-finwait2-timewait。2台虚拟机,本地,远程地址 都绑定实现tcp点对点,2份一样代码在a,b。不一定先发的数据先到,比如被动方先发的ack还没到主动方,fin先到。不分客户端,服务器,只分主动方和被动方。
2024-08-26 17:03:17
323
1
原创 最短路算法三
prim(类似dijkstra除了更新距离 一个是到起点,一个是到集合距离就是dmin)kruskal: 稀疏图 l时间花在排序上,m<n2,mlogm和mlogn一样的,难在建图,不考原理,重点记思路(是骨头),自己复述一遍,不能死记代码 血肉。已知n个城市的坐标,他们之间普电缆,允许相交,是城市之间相互连通。最小生成树(没有环,正负权都行!堆优化:稀疏图 少用, 多用kruskal。就是给一个完全无向图,求距离总和min。c. 最大流算法:不考,竞赛题考。朴素版:稠密图, m>>n。
2024-07-01 14:34:56
253
原创 最短路算法二
99.9% 题 没有负环2024.6.20笔试题 都能SPFA一般,不是笔试题水,是笔试数据比较水!!!!,不是一锤子买卖 不担心超时TLEBF的优化!有点傻,遍历所有边更新,但是不一定要都更新啊!!!优化!只有当dist[a]变小,才更新spfa巨快很多正权图也能用SPFA过掉!!!用BFS优化,用队列(用其他也行,推荐队列) 长得很像dijkstra算法II!!!时间复杂度 O(m) <O(nm)起点进queueWhile 队列不空1. t取队头;
2024-07-01 14:32:28
386
原创 最短路算法一
2024061819:33 朴素版Dijkstra47:00 Heap优化版最短路算法——5种!!!考察重点:不会考算法证明,这里不讲了,重点是实现+抽象1. 如何建图——如何定义点 边,抽象成一个图问题Prim /i/, kruskal是最小生成树算法 不是prime/ai/质数1. 是么时候用?方法n图的node数 m边数单源:只有一个起点,求从1个点到其他所有点/第n号点的最短距离多源汇:源点= 起点 汇点= 终点 起点终点都不确定。
2024-07-01 14:28:59
944
原创 数学知识——欧拉函数
1. 一个质数p的欧拉函数(1-p里和p互质的数的个数!)就是p-1 Phi[i] = I -1。因为欧拉函数和pk的次数ak无关,只和pk 有关,出现一个pk,多乘1-1/pk。那么pj *i的质因子 是1-1/pj不影响,与pj的次数无关!推出pj是i质因子,那么 phi[i] 已经乘过 1- 1/pj。一个质数p的欧拉函数(1-p里和p互质的数的个数!If a与n互质,那么a^phi[n] mod n 恒为1。2. I mod pj =0 则pj是i的质因子,则phi( p) = p-1。
2024-07-01 14:25:11
420
原创 数学知识—约数
map:存<指数的底数pi,质数的幂ai>,然后约数个数就是(幂a1+1)(幂a2+1)(幂+1)= Π(幂+1)因为a % b= a- (a|b) *b (a模b= a - (a整除b)*b= a -c * b)1. 如果d能整除a(就是a % d =0)而且d整除b,那么d能整除a,b线性组合ax+by。2. (a,b)=(b, a % b) a和b的最大公约数= b和a模b 的最大公约数。所以证明 (a,b) = (b, a-c * b) c=a|b。b)y,此时y=1,x=c,能推出d|a。
2024-07-01 14:21:14
458
原创 数学知识——质数
质数定理:1-n有n/lnn个质数 所以粗略O(nlnn/lnn)= o(n) 其实是o(nlog2log2n) 但基本上是O(n)级别,比如2^32, log2=32, log2=5, 埃式筛法,希腊人埃拉托斯特尼发明的。比如x=12, pj =2 枚举到x/pj= 6 已经筛过了,每个数只被筛一次,不会重复,所以线性!所以枚举较小的d 那么n/d一定是,不用枚举了 到n/i!剩下所有数就是质数 p不是2- (p-1)任何一个数的倍数!优化, d|n d整除n, 那么n/d一定能整除n。
2024-07-01 14:18:42
459
原创 Linux 精通 4.2
加response打印信息, reactor.c recv_cb的epollout反注释回来。response:回应的数据组织成包;request解析对方发来的data。reactor.c里#include “server.h”网页信息展现了——网页展示的都是string!改reactor.c 的recv_cb。来的io可读recv,还可写send。 断开网络助手浏览器连。server.h用状态机。
2024-06-17 20:26:56
462
原创 linux精通 4.1
client网络助手里send一次,vscode的server端一次性跳出来4行,就是边沿要四次才能收到的数。**水平触发:适合包大小固定的,**多个client 连listenfd 然后server调用accept。非阻塞IO用边沿触发,因为如果阻塞io,进入while会卡住,不recv了,所以非阻塞io用边沿触发好。1串字符32byte 要四次,所以要按四次send servervscode里才收的完!不行啊 编译给的代码报错啊 给的最新的不是0430那一版就不行啊。
2024-06-17 20:25:45
1227
原创 LINUX 精通 3.2
main里怎么实现accept_cb 里的regist部分抽出来main里0再改进一下set_event的flag 标志add 还是mod102410485760 然后编译调试总结。
2024-06-17 10:24:28
331
原创 LINUX 精通 3.1—— 2.2.1 服务器百万并发实现(实操)
在me下面创建我的,别搞到official官方老师的版本里去了,晚上把自己代码备份到github以防虚拟机down掉了 代码死了😿。listenfd -> EPOLL_IN(当可读) ->accept_cb。clientfd -> EPOLL_OUT(当可写) ->send_cb。clientfd -> EPOLL_IN(当可读) ->recv_cb。比如EPOLL_IN 要么accept要么recv callback。register先注册。只用改sin_port。先初始化server。
2024-06-17 10:23:12
283
原创 2.1.2 事件驱动reactor的原理与实现
算法刷题:2维前缀和,一二维差分 耗时 135min习题课 4h课程补20240425 耗时:4h课程链接。
2024-05-14 22:02:17
1037
2
原创 LINUX 精通 1——2.1.1 网络io与io多路复用select/poll/epoll
杂工作5-10年 够用费曼:不要直接抄,自己写;不要一个截图总之自己总结一个心得,以后回来还能更新不断实事求是骗不了自己的心吧,这个技术还是比较纯粹,让我找回了从前学习的感觉, 比科研这个乌烟瘴气的东西好多了与阿里云合作了,>60篇,有专家博主的认证即使以后工作还能交流学完了:简历面试前给老师看,可以了投问老师能拿到多少薪资,作为参考offer选择。
2024-05-12 12:21:58
821
3
原创 LINUX 入门 9
书接上回,把server做成并发量百万级的服务量装4台虚拟机 vmware右下角可以设置虚拟机内存 内核没敲,就看了一下,我的天,老师也没让敲multi_port.c的代码,直接用./tcp_server 8888 开起来server。
2024-05-07 16:22:34
431
1
原创 LINUX 入门 8
开始讲服务器端,之前是客户端DNS+https请求基础:网络编程并发服务器:多客户端一请求,一线程 veryoldIO多路复用,epoll/select上一章讲过了TCP server百万级连接借助netassist.exe。
2024-05-07 14:11:11
638
1
原创 LINUX 入门 7
先去看一遍教程 扫一遍,不用完全一行行读ctrl+shift+I调出来网页调试台——network——img过程client 浏览器建立与百度服务器的tcp连接(用DNS翻译成ip)在tcp 连接socket上发送http协议请求request(连接IP地址端口)百度server在tcp的socket连接上返回一个http协议相应response头部字段名有好多好多好多。
2024-05-07 08:51:02
1021
1
原创 LINUX 入门 6
自己去看教程 快速扫了一下,还是结合实践去看概念有感觉dns作用dns分层服务类型:授权型、递归型recursiondns协议——结构,服务器去解析,解析过程,报文格式DNS互联网开发重要组件,domain name system:翻译域名domain name为IP地址windows下win+Rcmdnslookup www.baidu.com 查看网址的ip 14.215.177.38和39 我貌似不行,一直timeout,第二天试了以下又行了wireshark 对dns解析。
2024-05-06 20:25:01
857
1
原创 LINUX 入门 4
线程池sdk组件封装software Development Kit任务队列:任务组成,先定义任务task struct再任务队列:链表串起tasks 双向链表//1.定义task//一个函数指针,指向一个接受 struct nTask* 参数并且没有返回值的函数。这个指针用于表示任务的执行函数。//一个指向 void 类型的指针,用于存储任务函数可能需要的额外数据或参数。// 双向链表。
2024-05-02 10:45:37
802
2
原创 LINUX 入门 3
概念引入临界资源:例子:买火车票,多个窗口共用一块资源,这里就是create函数里的count(都可以查座位号)并发concurrency多线程code10个火车票窗口——10个thread线程定义thread标识符id——create thread——thread 的callback函数编译在编译时使用-lpthread标志是为了告诉编译器链接 pthread 库。这样做是因为你的程序中使用了 pthread 库提供的函数,比如。
2024-04-29 16:25:17
471
原创 LINUX 入门 0.3
stdin重定向到infile,从infile读入输入,stdout重定向到Outfile输出写入到outfile。末尾的EOF后面带有空格,EOF前后都不应有空格或其他符号。获取命令行的每个参数 $n n代表第几个参数, so 语句后面可以加或者不加;-ge -gt -lt -le -eq -ne 只能比数字,比不了string。多行 :
2024-04-24 10:19:17
711
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人