【04】Linux网络编程
Linux网络编程
神秘的火柴人
学习不是短时间的冲刺,而是有节制的坚持:)
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
网络编程基础知识02
文章目录1.TCP首部2.TCP三次握手、四次挥手3.TCP状态转换 1.TCP首部 2.TCP三次握手、四次挥手 3.TCP状态转换原创 2018-12-26 21:56:50 · 189 阅读 · 0 评论
-
网络编程基础知识03
文章目录1.TCP通讯流程2.C/S模型2.1普通版2.2多进程服务器2.3多线程服务器 1.TCP通讯流程 2.C/S模型 2.1普通版 服务器端: #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <s原创 2018-12-27 20:46:36 · 369 阅读 · 0 评论
-
网络编程基础知识01
分算法原创 2018-12-14 16:58:15 · 404 阅读 · 1 评论
-
六大高并发模型
文章目录1.多进程2.多线程3.线程池4.select、poll、epoll 1.多进程 缺点: 启动和关闭子进程带来很大的开销 系统创建线程有上限 命令:ulimit -u 简单实现 2.多线程 缺点:与多进程相似 简单实现 3.线程池 基本思想: 事先创建一定数量的工作线程,当任务队列中有任务时就唤醒阻塞等待的工作线程; 用一个管理者线程来管理何时需要创建新线程、销毁多余线程。 简单实现...原创 2019-08-28 19:31:01 · 767 阅读 · 0 评论 -
线程同步技术——条件变量
条件变量 一些注意点 pthread_cond_wait函数 虚假唤醒 若条件变量条件产生只发生一次,确保在调用pthread_cond_signal或pthread_cond_broadcast函数之前,首先有线程调用pthread_cond_wait函数,确保条件变量信号不丢失。 参考链接 ...原创 2019-08-17 16:08:47 · 129 阅读 · 0 评论 -
Net——EventLoopThread类
文章目录1. 作用2.成员变量3.测试用例 Reactor_test06.cc 1. 作用 创建了一个线程,并线程函数中创建了一个EventLoop对象 2.成员变量 3.测试用例 Reactor_test06.cc include <muduo/net/EventLoop.h> #include <muduo/net/EventLoopThread.h> #in...原创 2019-06-08 16:12:59 · 223 阅读 · 0 评论 -
Net——EventLoop类(二)、Channel类、Poller类、PollPoller类
Channel的update()会调用EventLoop的updateChannel(),会调用Poller的updateChannel() 一个EventLoop包含多个Channel Acceptor是被动连接的抽象 Connector是主动连接的抽象 ////Channel类 ...原创 2019-05-17 23:31:07 · 432 阅读 · 0 评论 -
Net——EventLoop类(一)
1. 简化版EventLoop EventLoop.h #ifndef MUDUO_NET_EVENTLOOP_H #define MUDUO_NET_EVENTLOOP_H #include <boost/noncopyable.hpp> #include <muduo/base/CurrentThread.h> #include <muduo/bas...原创 2019-05-17 22:03:28 · 343 阅读 · 0 评论 -
Net——让EventLoop处理定时器事件
timerfd_create() CLOCK_MONOTONIC:如果人为将系统时间向后调整,不会触发定时器原创 2019-05-22 22:58:22 · 420 阅读 · 0 评论 -
Net——EventLoop类(三)、Timer类、TimerId类、TimerQueue类
timestamp相当于整数,保存在寄存器当中,而非堆栈当中原创 2019-05-25 13:01:28 · 321 阅读 · 0 评论 -
Base——LogFile类
1. 日志滚动 2. 成员变量 basename_:~/Documents/build/release-cpp11/bin 的basename为 bin rollSize_:文件大小达到rollSize_时,换一个文件 flushInterval_:写入时间间隔 count_:计数器 startOfPeriod_:开始写入的时间,调整为当天零点(原因:比较是否是第二天) lastRoll_:...原创 2019-05-11 22:33:49 · 219 阅读 · 0 评论 -
Base——Logger类、LogStream类
、、FixedBuffer类 、、LogStream类原创 2019-05-11 20:29:48 · 551 阅读 · 0 评论 -
Base——ThreadLocal类
1.线程特定数据(Thread-specific Data,TSD) 在Thread类.中通过 __thread 来标示属于线程自己内部数据,但只能适用于POD类型数据,对于其它类型的变量利用POSIX线程库所提供的方法。 int pthread_key_create(pthread_key_t *key, void (*destructor)(void*)); 线程退出时,调用 destr...原创 2019-05-07 09:31:13 · 330 阅读 · 0 评论 -
Base——Singleton类
1.一个公有函数instance(),其余为私有 pthread_once(): int pthread_once(pthread_once_t *once_control, void (*init_routine)(void)); 保证init_routine指向的函数只执行一次 init()函数定义如下: atexit(...原创 2019-05-05 22:33:11 · 530 阅读 · 0 评论 -
Base——ThreadPool类
1.线程池结 2.成员变量 cond_:通知线程队列中的线程来取任务 threads_:线程队列,里面存放的是muduo::Thread queue_:任务队列 running_:此线程池是否工作 muduo新版中添加了一些变量,但实现的基本功能没变 3.测试用例 ThreadPool_test.cc 以muduo-0.9.1版本为例: #include <muduo/...原创 2019-05-05 20:59:38 · 398 阅读 · 0 评论 -
Base——BlockingQueue类、BoundedBlockingQueue类
1.成员变量 BlockingQueue:无界缓冲区 BoundedBlockingQueue:有界缓冲区 queue_:循环队列 2.生产者、消费者模型 利用信号量实现伪码: //生产者 p(semFull) //查看队列是否有空间 lock(mutex) queue.push(物品) unlock(mutex) v(semEmpty) //通知消费者有物品 //...原创 2019-05-05 11:12:51 · 380 阅读 · 0 评论 -
Base——Condition类、CountDownLatch类
1.成员变量 Condition类 mutex_为引用,该类并不管理该成员变量的生命周期 CountDownLatch类 mutable关键字: 知乎 mutable意思是“这个成员变量不算对象内部状态”。比如,你搞了个变量,用来统计某个对象的访问次数(比如供debug用)。它变成什么显然并不影响对象功用,但编译器并不知道:它仍然会阻止一个声明为const的函数修改这个变量。把这...原创 2019-05-05 11:12:27 · 544 阅读 · 0 评论 -
Base——MutexLock类、MutexLockGuard类
1.基类 2.成员变量 MutexLock类: holder_:拥有此互斥体变量的线程 tid MutexLockGuard类: 只是为mutex_的引用,这两个类为关联关系 3. MutexLock mutex; void foo() { mutex.lock(); 。。。 if() { //mutex.unlock(); return ; } mu...原创 2019-05-05 11:12:01 · 511 阅读 · 0 评论 -
Base——Thread类
1.基类 2.成员变量 started_:线程是否运行 pthreadId_:线程id tid_:线程真实ID func_:线程函数 name_:线程名字 numCreated_:线程数(原子类型,参看Atomic_unittest类) 3.__thread muduo-0.9.1版本: __thread修饰的变量属于线程自己内部的局部变量 注 muduo新版在 Curren...原创 2019-05-05 11:11:27 · 641 阅读 · 0 评论 -
Base——Exception类
1. 基类 2.const throw() stackoverflow: const means that this function (which is a member function) will not change the observable state of the object it is called on. The compiler enforces this by n...原创 2019-05-05 11:10:47 · 389 阅读 · 0 评论 -
Base——Atomic_unittest类
1.基类 如何让一个类无法拷贝? 将拷贝构造函数、赋值操作符设为私有 2.一些原子类操作 3.volatile 成员函数: 作用:要使用volatile声明的变量的值时,系统总是从内存中读取数据,而不是使用保存在寄存器中的备份。防止编译器对代码进行优化。 4. 测试用例 Atomic_unittest.cc 参考代码 ...原创 2019-05-05 11:10:12 · 201 阅读 · 0 评论 -
Base——Timestamp类
1.基类 copyable类:空基类 boost::less_than_comparable<Timestamp>:类中只需实现operator<(),就可以自动实现operator>(),operator >=(),operator <=() 2.成员函数 距离1970-01-01 00:00:00(查看:man 2 time)的时间 3. 编...原创 2019-05-05 11:09:08 · 257 阅读 · 0 评论 -
EMFILE处理
产生原因: 进程打开的文件描述符达到上限,服务器accept时,返回EMFILE 问题: listenfd一直处于监听状态,而此时服务器无法接受客户端的连接,所以会一直触发,产生busy loop 处理方法: 一开始打开一个空闲的文件描述符; 当遇到上述情况时,先关闭这个文件描述符,此时将获得一个文件描述符的名额; 再用accept接受客户端连接; 立即关闭connectfd(优雅的与客...原创 2019-05-02 15:55:16 · 1447 阅读 · 1 评论 -
epoll简单使用
1.int epoll_create(int size) 创建红黑树根节点。 2. int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event) 添加listenfd 3. int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int tim...原创 2019-03-02 12:59:54 · 321 阅读 · 0 评论 -
条件变量的虚假唤醒
使用方式: pthread_mutex_lock(&g_threadinfo.mutex); //配合互斥锁使用 while (g_threadinfo.tasknum <= 0) { //如果获得了互斥锁,但是条件不合适的话,wait会释放锁,不往下执行。 //当变化后,条件合适,将直接获得锁。 pthread_cond_wait(&g_threa...原创 2019-02-24 14:12:52 · 585 阅读 · 0 评论 -
基于poll服务器的简单实现
涉及的点: poll函数 int poll(struct pollfd *fds, nfds_t nfds, int timeout); fds:要监听的文件描述符结构体数组 struct pollfd { int fd; /* 文件描述符 */ short events; /* 监控的事件 */ short revents...原创 2019-02-23 16:54:48 · 1997 阅读 · 0 评论 -
基于select服务器简单实现
涉及的点: select函数 对监控的文件描述符集合操作函数 int select( int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); nfds: 监控的文件描述符集里最大文件描...原创 2019-02-23 16:15:59 · 625 阅读 · 1 评论 -
线程池的简单实现
#include &amp;amp;lt;stdlib.h&amp;amp;gt; #include &amp;amp;lt;pthread.h&amp;amp;gt; #include &amp;amp;lt;unistd.h&amp;amp;gt; #include &amp;amp;lt;assert.h&amp;amp;gt; #include &amp;a原创 2019-02-23 15:34:06 · 246 阅读 · 0 评论
分享