03 2018 档案
摘要:ET模式下,需要循环从缓存中读取,直到返回EAGAIN没有数据可读后,一个被通知的事件才算结束。如果还读取过程中,同一个连接又有新的事件到来,触发其他线程处理同一个socket,就乱了。EPOLL_ONESHOT就是用来避免这种情况发生的。将事件设置为EPOLL_ONESHOT后,每次事件触发后就会
阅读全文
摘要:ZeroTierOne: 1、ZeroTierOne的架构 2、ZT的多线程和多进程(使用的线程池,怎么实现,为什么) 3、使用到的设计模式(Topology是单例模式,。。。工厂模式。。抽象工厂模式) 4、如何着手开源项目(review源码->注释掉加密压缩函数->抓包->对着代码分析报文格式->
阅读全文
摘要:https://www.cnblogs.com/yuuyuu/p/5103744.html 这篇文章已经写的很清楚了,暂时不展开论述了。 http://blog.csdn.net/weiyuefei/article/details/52242867
阅读全文
摘要:epoll项目中用了几次,但是对于其原理只是一知半解。我希望通过几篇blog能加深对她的理解。 我认为epoll是同步IO,因为他在调用epoll_wait时,内核在有I/O就绪前是阻塞的,虽然可以将timeout设置为0,此时就是非阻塞的了。但这不是变成忙轮询了么? select和epoll的比较
阅读全文
摘要:条件变量(二)这边文章主要纠结了pthread_cond_wait(&cond,&mutex)函数以及为何判断条件时要用while而不是if。 本文还想弄清楚另外两个关于pthread_cond_signal(&cond)的问题: 1、先改变条件值还是先调用pthread_cond_signal?
阅读全文
摘要:条件变量是用来等待某个条件是否成立的等待原语。主要有两个函数: 1、 pthread_cond_signal(&cond) :用来发送信号,唤醒正在wait()ing的线程。要搞清楚这里所谓唤醒,要知道其实线程中有两个队列cond_wait和mutex_lock。signal的唤醒只是将cond_w
阅读全文
摘要:从长链接说起 TCP是长链接的,也就是说连接建立后,及时数年没有通信连接仍然存在。这样做的好处是:免去了DNS解析的时间,连接建立等时间,大大加快了请求的速度,同时也有利于接受服务器的实时消息。但前提是连接可用。 TCP的keepalive机制 服务器为了探测对端是否还活着,于是每隔两小时发送一个k
阅读全文
摘要:互斥器mutex用来排他性的访问共享数据,他不是等待原语。若要等待某个条件成立,我们应该使用条件变量(condition variable)。条件变量顾名思义就是一个或多个线程等待某个布尔表达式为真,即等待别的线程唤醒它。 条件变量只有一种使用方式,wait端: 1、必须与Mutex一起使用,以保护
阅读全文
摘要:POSIX线程函数一共有110多个,常用的不过十几个。贵精不贵多。这11个最基本的Pthread函数是: 2个:线程的创建和等待结束(join)。 4个:mutex的创建、销毁、加锁、解锁。 5个:条件变量的创建、销毁、等待、通知、广播。 用这三类东西(thread、mutex、condition)
阅读全文
摘要:一、定义 教科书式回答,进程是资源分配的最小单位,而线程是CPU调度的最小单位。 进程有自己的独立地址空间(虚拟的,4G大小),一个进程崩溃后不会对其他进程产生影响。同一进程内的某一个线程崩溃后,整个进程也崩溃了。因为线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间。 多进程比多线程程序要健
阅读全文
摘要:先看一段代码: 运行结果如下,情理之中,意料之内: C++创建对象的时候先创建基类部分,然后创建派生部分。析构的时候要反过来了,先释放子类部分,然后在释放父类部分。但是这里只释放了父类部分,没有释放派生类的部分。为什么呢? 原因很明确:因为之类pB是基类指针,虽然指向的是派生类,只能调用自己的函数,
阅读全文
摘要:volatile只保证其“可见性”,不保证其“原子性”。 执行count++;这条语句由3条指令组成: (1)将 count 的值从内存加载到 cpu 的某个 寄存器r; (2)将 寄存器r 的值 +1,结果存放在 寄存器s; (3)将 寄存器s 中的值写回内存。 所以,如果有多个线程同时在执行 c
阅读全文

浙公网安备 33010602011771号