
网络编程
韭菜鲜肉大馄饨
除了死亡所有的离开都是背叛...
展开
-
网络编程 26(下)阻塞 I/O 线程池模型
网络编程 26(下)阻塞 I/O 线程池模型目标一、线程的两个概念二、阻塞 I/O 线程池模型服务端目标问题:虽然线程是轻量级的,但如果并发连接过多,线程的频繁创建和销毁会有一定的开销(虽然上下文切换开销不大)解:使用线程池的方式,在服务端启动的同时,预先创建一定数量的线程,避免频繁进行线程创建和销毁一、线程的两个概念锁(mutex):当前线程操作时,其它线程不能进入,保证线程安全条...原创 2019-12-20 00:56:05 · 191 阅读 · 0 评论 -
网络编程 26(上)阻塞 I/O 线程模型
网络编程 26_阻塞 I/O 线程模型目标一、POSIX 线程模型1.1 创建线程1.2 终止线程父线程终止所有子线程父线程终止某个子线程回收已终止线程资源1.3 分离线程二、阻塞 I/O 线程模型服务端三、CMake 管理当前项目① 代码组成② 创建并进入 build 目录③ 外部编译四、测试总结目标使用轻量级的线程处理多个连接,为每一个连接创建一个独立的线程去服务一、POSIX 线程模型...原创 2019-12-19 01:03:03 · 479 阅读 · 0 评论 -
网络编程 25_阻塞 I/O 进程模型
目标为每一个连接创建一个独立的进程去服务一、父子进程进程是程序执行的最小单位,创建进程使用 fork 函数fork 创建进程pid_t fork(void);调用一次,在父子进程中各返回一次,在父进程中返回进程 ID 号,在子进程中返回 0,只能通过返回值判断当前执行的进程是父进程还是子进程if (fork() == 0) { // 子进程} else { // ...原创 2019-12-15 18:31:24 · 358 阅读 · 0 评论 -
网络编程 23_高性能 I/O 复用技术 epoll
网络编程 23_高性能 I/O 复用技术 epoll目标一、epoll 机制的三个函数二、epoll 用法2.1 创建 epoll 对象2.2 填充 epoll_event 结构体2.3 注册事件监听到 epoll 对象2.4 等待监听的事件到来三、epoll 例子四、CMake 管理当前项目① 代码组成② 创建并进入 build 目录③ 外部编译五、测试总结目标理解并使用 epollepo...原创 2019-12-14 22:05:01 · 309 阅读 · 0 评论 -
网络编程 22_非阻塞 I/O + select 多路复用
网络编程 22_非阻塞 I/O + select 多路复用目标一、非阻塞 I/O + select 多路复用服务端二、CMake 管理当前项目① 代码组成② 创建并进入 build 目录③ 外部编译三、测试总结目标理解阻塞和非阻塞的区别阻塞应用程序调用阻塞的 I/O 获取资源时,在资源可以获取之前,应用程序会被挂起,进程进入休眠状态,让出 CPU 给其它进程,给人的感觉像是被 “阻塞” ...原创 2019-12-08 23:19:23 · 416 阅读 · 0 评论 -
网络编程 21_poll
网络编程 21_poll目标一、函数介绍二、poll 通信例子服务端客户端目标理解 poll 函数一、函数介绍int poll(struct ploofd *fds, unsigned long nfds, int timeout);参数pollfd:数组 fdsnfds:数组 fds 大小timeout:描述 poll 行为,小于 0,一直等待;等于 0,立即返回不阻塞;大于...原创 2019-11-30 21:49:31 · 313 阅读 · 0 评论 -
网络编程 期中_动手编个小程序
网络编程 期中_动手编个小程序一、题目二、开始客户端服务端三、CMake 管理当前项目① 代码组成② 创建并进入 build 目录③ 外部编译四、测试一、题目请分别写一个客户端程序和服务器程序,客户端程序连接上服务器之后,通过敲命令和服务器进行交互,支持的交互命令包括:pwd:显示服务器应用程序启动时的当前路径cd:改变服务器应用程序的当前路径ls:显示服务器应用程序当前路径下的文件列...原创 2019-11-19 23:19:05 · 340 阅读 · 0 评论 -
网络编程 11_连接关闭
网络编程 11_连接关闭目标一、常用函数close 函数shutdown 函数二、select 多路复用客户端服务端目标理解连接关闭整个流程一、常用函数close 函数close() 函数会对套接字引用计数减一,当减为 0 时,会释放套接字,并且关闭 TCP 两个方向的数据流// 返回值:0 成功,-1 出错int close(int sockfd);close() 关闭两个方向...原创 2019-11-03 20:35:22 · 302 阅读 · 0 评论 -
网络编程 06_使用 UDP 进行读写
网络编程 06_使用 UDP 协议进行读写目标一、发送报文二、接收报文三、UDP 通信例子服务端客户端三、CMake 管理当前项目① 代码组成② 创建并进入 build 目录③ 外部编译四、测试 UDP 例子场景一:先运行客户端,再运行服务端场景二:先运行服务端,再运行客户端场景三:同时开启多个客户端场景四:中途重启服务器小结目标使用 UDP 协议收发数据,了解与 TCP 协议的区别一、发送...原创 2019-10-26 19:57:33 · 849 阅读 · 0 评论 -
网络编程 05_使用 TCP 进行读写
目标使用创建的套接字收发数据一、发送数据常用函数ssize_t write(int socketfd, const void *buffer, size_t size)ssize_t send(int socketfd, const void *buffer, size_t size, int flags)ssize_t sendmsg(int sockfd, const struct...原创 2019-10-20 04:48:24 · 661 阅读 · 0 评论 -
Linux 下 IO 复用与 epoll 简介
一、阻塞 I/O阻塞 I/O 模式下,一个线程只能处理一个流的 I/O 事件。如果想要同时处理多个流,要么多进程(fork),要么多线程(pthread_create),但是两种方法效率都不高二、epollepoll 可以理解为 event poll,不同于忙轮询和无差别轮询,epoll 会把哪个流发生了怎样的 I/O 事件通知我们,此时我们对这些流的操作都是有意义的。在高并发下,epoll...原创 2019-04-04 23:59:48 · 328 阅读 · 0 评论