【04】Linux网络编程
Linux网络编程
神秘的火柴人
学习不是短时间的冲刺,而是有节制的坚持:)
展开
-
网络编程基础知识01
分算法原创 2018-12-14 16:58:15 · 329 阅读 · 1 评论 -
网络编程基础知识02
文章目录1.TCP首部2.TCP三次握手、四次挥手3.TCP状态转换1.TCP首部2.TCP三次握手、四次挥手3.TCP状态转换原创 2018-12-26 21:56:50 · 134 阅读 · 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 · 319 阅读 · 0 评论 -
Base——ThreadPool类
1.线程池结2.成员变量cond_:通知线程队列中的线程来取任务threads_:线程队列,里面存放的是muduo::Threadqueue_:任务队列running_:此线程池是否工作muduo新版中添加了一些变量,但实现的基本功能没变3.测试用例 ThreadPool_test.cc以muduo-0.9.1版本为例:#include <muduo/...原创 2019-05-05 20:59:38 · 326 阅读 · 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 · 456 阅读 · 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 · 282 阅读 · 0 评论 -
Base——Logger类、LogStream类
、、FixedBuffer类、、LogStream类原创 2019-05-11 20:29:48 · 461 阅读 · 0 评论 -
Base——LogFile类
1. 日志滚动2. 成员变量basename_:~/Documents/build/release-cpp11/bin 的basename为 binrollSize_:文件大小达到rollSize_时,换一个文件flushInterval_:写入时间间隔count_:计数器startOfPeriod_:开始写入的时间,调整为当天零点(原因:比较是否是第二天)lastRoll_:...原创 2019-05-11 22:33:49 · 168 阅读 · 0 评论 -
Net——EventLoop类(三)、Timer类、TimerId类、TimerQueue类
timestamp相当于整数,保存在寄存器当中,而非堆栈当中原创 2019-05-25 13:01:28 · 236 阅读 · 0 评论 -
Net——让EventLoop处理定时器事件
timerfd_create()CLOCK_MONOTONIC:如果人为将系统时间向后调整,不会触发定时器原创 2019-05-22 22:58:22 · 335 阅读 · 0 评论 -
Net——EventLoop类(一)
1. 简化版EventLoopEventLoop.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 · 263 阅读 · 0 评论 -
Net——EventLoop类(二)、Channel类、Poller类、PollPoller类
Channel的update()会调用EventLoop的updateChannel(),会调用Poller的updateChannel()一个EventLoop包含多个ChannelAcceptor是被动连接的抽象Connector是主动连接的抽象////Channel类...原创 2019-05-17 23:31:07 · 333 阅读 · 0 评论 -
Net——EventLoopThread类
文章目录1. 作用2.成员变量3.测试用例 Reactor_test06.cc1. 作用创建了一个线程,并线程函数中创建了一个EventLoop对象2.成员变量3.测试用例 Reactor_test06.ccinclude <muduo/net/EventLoop.h>#include <muduo/net/EventLoopThread.h>#in...原创 2019-06-08 16:12:59 · 159 阅读 · 0 评论 -
线程同步技术——条件变量
条件变量一些注意点pthread_cond_wait函数虚假唤醒若条件变量条件产生只发生一次,确保在调用pthread_cond_signal或pthread_cond_broadcast函数之前,首先有线程调用pthread_cond_wait函数,确保条件变量信号不丢失。参考链接...原创 2019-08-17 16:08:47 · 83 阅读 · 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 · 289 阅读 · 0 评论 -
Base——Condition类、CountDownLatch类
1.成员变量Condition类mutex_为引用,该类并不管理该成员变量的生命周期CountDownLatch类mutable关键字:知乎mutable意思是“这个成员变量不算对象内部状态”。比如,你搞了个变量,用来统计某个对象的访问次数(比如供debug用)。它变成什么显然并不影响对象功用,但编译器并不知道:它仍然会阻止一个声明为const的函数修改这个变量。把这...原创 2019-05-05 11:12:27 · 449 阅读 · 0 评论 -
线程池的简单实现
#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 · 205 阅读 · 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 · 526 阅读 · 1 评论 -
基于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 · 1883 阅读 · 0 评论 -
条件变量的虚假唤醒
使用方式:pthread_mutex_lock(&g_threadinfo.mutex); //配合互斥锁使用while (g_threadinfo.tasknum <= 0){ //如果获得了互斥锁,但是条件不合适的话,wait会释放锁,不往下执行。 //当变化后,条件合适,将直接获得锁。 pthread_cond_wait(&g_threa...原创 2019-02-24 14:12:52 · 493 阅读 · 0 评论 -
epoll简单使用
1.int epoll_create(int size)创建红黑树根节点。2. int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event)添加listenfd3. int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int tim...原创 2019-03-02 12:59:54 · 256 阅读 · 0 评论 -
EMFILE处理
产生原因:进程打开的文件描述符达到上限,服务器accept时,返回EMFILE问题:listenfd一直处于监听状态,而此时服务器无法接受客户端的连接,所以会一直触发,产生busy loop处理方法:一开始打开一个空闲的文件描述符;当遇到上述情况时,先关闭这个文件描述符,此时将获得一个文件描述符的名额;再用accept接受客户端连接;立即关闭connectfd(优雅的与客...原创 2019-05-02 15:55:16 · 1305 阅读 · 1 评论 -
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 · 205 阅读 · 0 评论 -
Base——Atomic_unittest类
1.基类如何让一个类无法拷贝?将拷贝构造函数、赋值操作符设为私有2.一些原子类操作3.volatile成员函数:作用:要使用volatile声明的变量的值时,系统总是从内存中读取数据,而不是使用保存在寄存器中的备份。防止编译器对代码进行优化。4. 测试用例 Atomic_unittest.cc参考代码...原创 2019-05-05 11:10:12 · 144 阅读 · 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 · 318 阅读 · 0 评论 -
Base——Thread类
1.基类2.成员变量started_:线程是否运行pthreadId_:线程idtid_:线程真实IDfunc_:线程函数name_:线程名字numCreated_:线程数(原子类型,参看Atomic_unittest类)3.__threadmuduo-0.9.1版本:__thread修饰的变量属于线程自己内部的局部变量注muduo新版在 Curren...原创 2019-05-05 11:11:27 · 562 阅读 · 0 评论 -
Base——MutexLock类、MutexLockGuard类
1.基类2.成员变量MutexLock类:holder_:拥有此互斥体变量的线程 tidMutexLockGuard类:只是为mutex_的引用,这两个类为关联关系3.MutexLock mutex;void foo(){ mutex.lock(); 。。。 if() { //mutex.unlock(); return ; } mu...原创 2019-05-05 11:12:01 · 438 阅读 · 0 评论 -
六大高并发模型
文章目录1.多进程2.多线程3.线程池4.select、poll、epoll1.多进程缺点:启动和关闭子进程带来很大的开销系统创建线程有上限命令:ulimit -u简单实现2.多线程缺点:与多进程相似简单实现3.线程池基本思想:事先创建一定数量的工作线程,当任务队列中有任务时就唤醒阻塞等待的工作线程;用一个管理者线程来管理何时需要创建新线程、销毁多余线程。简单实现...原创 2019-08-28 19:31:01 · 658 阅读 · 0 评论