Linux编程
MrSun丶
这个作者很懒,什么都没留下…
展开
-
“粘包”问题的起因与解决
本文参考于:徐晓鑫女士的《后台开发》(1)因为nagle算法。什么是nagle算法,简而言之是为了避免浪费资源,将包合并发送的算法。就好比你一个人打车必然不划算,可以约几个和你一道的人一起打车,宾主尽欢。但是随之而来的问题是,因为一起发送,故接收方不知道一个包的骑士==起始和截止位置。(2)因为我们网络编程时,其实是将接受到的数据置入缓冲区,待应用层读取,但若应用层阻塞于其他事情而归期未至...原创 2019-04-14 20:37:12 · 887 阅读 · 0 评论 -
大小端定义及判断
大端,小端又名网络字节序,主机字节序。高位高存,低位低存是小端,复合人们的视觉体验,不用改变位置,如0x0102,在内存的存储位置也是 01 02。而大段相反,复合逻辑,为02 01。如今网络传输,keli5c等使用大端,x86系列使用小段。unp中有一个程序用来判断大小端://endian_check.cpp#include<iostream>using namespa...原创 2019-04-14 20:46:08 · 321 阅读 · 0 评论 -
网络I/O模型
本文参考于analogous_love大神的linux网络专栏,以及徐晓鑫女士的《后台开发》一书,十分感谢两位。网络I/O模型,在unp中,斯蒂夫先生将它归为五种:(1)阻塞式I/O(2)非阻塞式I/O(3)多路复用式I/O(4)信号驱动式I/O(5)异步I/O而在徐晓鑫女士的《后台开发》一书中,并没有提及信号驱动式。其中阻塞式是入门级的,就不多讲述了。(2)...原创 2019-04-17 19:25:27 · 135 阅读 · 0 评论 -
Reactor模式,Proactor模式,半同步/半异步模式
一:Reactor是这样一种模式:它要求主线程监听文件描述符上是否有事件发生,有的话交由工作线程处理,读写数据,工作连接请求等都交由工作线程完成,主线程不再参与。(以epoll为例)1.主线程向epoll内核事件表中注册socket上的读就绪事件2.主线程使用epoll_wait等待socket上是否有数据可读3.有事件可读时epoll_wait通知主线程,主线程将之放入请求队列4...原创 2019-04-22 21:20:37 · 972 阅读 · 0 评论 -
多线程详解
当进程为执行任务而多次切换时,必然会产生额外的开销。这时引入一个更小的单位——线程。一个进程里面有多个线程,这些线程也可能会服务于其他进程。例如酷狗播放器的声音处理线程,与爱奇艺的声音处理线程可能为同一线程。线程共享进程的所有信息。线程共享的进程环境包括:进程代码段 进程的公有资源(如全局变量,利用这些共享的数据,线程很容易的实现相互之间的通信) 进程打开的文件描述符 消...原创 2019-04-19 11:14:02 · 159 阅读 · 0 评论 -
web服务器开发
#http_conn.h //负责状态码,读写缓存区等的定义声明。#ifndef HTTPCONNECTION_H_#define HTTPCONNECTION_H_#include<unistd.h>#include<iostream>#include<sys/types.h>#include<fcntl.h>#includ...原创 2019-06-06 20:39:56 · 711 阅读 · 0 评论