![](https://img-blog.csdnimg.cn/20190927151026427.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Linux网络编程
文章平均质量分 92
网络编程
凌桓丶
现腾讯边缘存储研发工程师,前字节跳动流式计算研发工程师、CSDN博客专家。
展开
-
Linux中进程间传递文件描述符的方法
在进行fork调用后,由于子进程会拷贝父进程的资源,所以父进程中打开的文件描述符在子进程中仍然保持着打开,我们很容易的就将父进程的描述符传递给了子进程。但是除了这种情况下,如果想将某个父进程在子进程创建后才打开的描述符传递给子进程,又或者是想将子进程的描述符传递给父进程时,就遇到了问题。在Linux中,虽然文件描述符是一个整型值,但是它的传递并非只是传递这个值而已。因为这个整型值其实是文件描述符表fd_array[]的下标由于不同进程的文件描述符表不同,所以要传递一个文件描述符,就是要在接收进程中的文原创 2020-10-12 20:08:21 · 4145 阅读 · 3 评论 -
Linux网络编程 | 零拷贝 :sendfile、mmap、splice、tee
文章目录传统文件传输的问题Linux中实现零拷贝的方法传统文件传输的问题在网络编程中,如果我们想要提供文件传输的功能,最简单的方法就是用read将数据从磁盘上的文件中读取出来,再将其用write写入到socket中,通过网络协议发送给客户端。ssize_t read(int fd, void *buf, size_t count);ssize_t write(int fd, const void *buf, size_t count);但是就是这两个简单的操作,却带来了大量的性能丢失例如我们原创 2020-10-11 10:35:48 · 1572 阅读 · 2 评论 -
Linux网络编程 | 高性能定时器 :时间轮、时间堆
文章目录时间轮时间堆时间轮时间堆原创 2020-10-10 16:29:40 · 1070 阅读 · 2 评论 -
Linux网络编程 | 定时事件 :Linux常见定时方法、定时器链表、空闲断开
文章目录Linux常见定时方法定时器链表空闲断开Linux常见定时方法 Socket超时选项 I/O复用超时参数 SIGALRM信号 ****定时器链表#ifndef __TIMER_LIST_H__#define __TIMER_LIST_H__#include<time.h>#include<stdio.h>#include<sys/socket.h>#include<sys/types.h>#include<ne原创 2020-10-09 10:36:12 · 1172 阅读 · 0 评论 -
Linux网络编程 | 并发模式:半同步/半异步模式、领导者/追随者模式
文章目录同步与异步半同步/半异步模式变体:半同步/半反应堆模式改进:更高效的半同步/半异步模式领导者/追随者模式组件 :句柄集、线程集、事件处理器并发模式是指I/O处理单元和多个逻辑单元之间协调完成任务的方法。服务器主要有两种并发编程模式:半同步/半异步模式(half-sync/half-async)模式和领导者/追随者(Leader/Followers)模式同步与异步首先在这里要指出,这里的"同步"和“异步”与I/O模型中的”同步I/O“与“异步I/O”是两个完全不同的概念,不能将其混淆。在I原创 2020-10-07 10:48:48 · 942 阅读 · 0 评论 -
Linux网络编程 | 信号 :信号函数、信号集、统一事件源 、网络编程相关信号
文章目录信号函数信号集统一事件源网络编程相关信号Linux 进程信号:信号的概念、生命周期、产生流程、阻塞在半年前我写过一篇博客介绍了Linux中信号的概念以及处理流程,这次再来深入的讲一讲信号的具体使用方法以及在网络编程中的具体应用。信号函数要想为一个信号设置处理函数,可以使用以下两个系统调用。 signal signal函数的使用非常简单,只需要直接指定信号类型以及处理的方法即可#include <signal.h>typedef void (*sighandler_原创 2020-10-08 10:47:42 · 711 阅读 · 0 评论 -
Linux网络编程 | 事件处理模式:Reactor模式、Proactor模式
文章目录Reactor模式Proactor模式同步I/O模型模拟Proactor模式两者的优缺点ReactorProactor随着网络设计模式的兴起,Reactor和Proactor事件处理模式应运而生。同步I/O模型通常用于实现Proactor模式,异步I/O模型通常用于实现Proactor模式。Reactor模式Reactor模式要求主线程(I/O处理单元)只负责监听文件描述符上是否有事件就绪,如果有则将该就绪事件通知给工作线程(逻辑单元)。除此之外主线程不会进行其他实质性的工作,读写数据、接收原创 2020-10-06 11:05:21 · 1022 阅读 · 4 评论 -
Linux网络编程 | 多路复用I/O :select、poll、epoll、水平触发与边缘触发、惊群问题
文章目录selectselect原创 2020-08-02 23:25:50 · 1803 阅读 · 0 评论 -
Linux网络编程 | IO模型 :阻塞IO、非阻塞IO、信号驱动IO、异步IO、多路复用IO
目录IO模型阻塞与非阻塞同步与异步阻塞IO非阻塞IO信号驱动IO多路复用IO异步IOIO模型根据各自的特性不同,IO模型被分为阻塞IO、非阻塞IO、信号驱动IO、异步IO、多路复用IO五类。最主要的两个区别就是阻塞与非阻塞,同步与异步。阻塞与非阻塞阻塞与非阻塞最主要的区别就是程序在等待调用结果时的状态。阻塞:为了完成一个功能发起调用,如果不具备完成功能的条件,则调用会一直等待非阻塞:为了完成一个功能发起调用,如果不具备完成功能的条件,则立即报错返回同步与异步同步与异步最主要的区别就是功能原创 2020-07-21 17:49:13 · 718 阅读 · 0 评论 -
Linux网络编程 | Socket编程(二)TCPSocket的封装、TCP服务器多进程、多线程版本的实现
目录TCPSocket的封装TCP客户端TCP服务器多进程版本多线程版本TCPSocket的封装#include<iostream>#include<string>#include<unistd.h>#include<sys/socket.h>#include<arpa/inet.h>#include<netinet/in.h>const int MAX_LISTEN = 5;inline void CheckS原创 2020-07-17 18:35:58 · 1358 阅读 · 0 评论 -
Linux网络编程 | Socket编程(一):Socket的介绍、UDPSocket的封装、UDP服务器/客户端的实现
目录套接字编程Sockaddr结构字节序地址转换常用套接字接口UDP的通信流程UDPSocket的封装UDP服务器UDP客户端套接字编程所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。Sockaddr结构在linux下,根据所使用的不同协议,又分为以下三种结构,在使用时,我们可以选择自己所需要的结构,通信时再将我们所使用的结构强转为sockaddr,这样就能保证数据格式的一致原创 2020-07-16 18:17:58 · 1216 阅读 · 1 评论