随笔分类 -  高性能服务器

摘要:关于CAS等原子操作 在开始说无锁队列之前,我们需要知道一个很重要的技术就是CAS操作——Compare & Set或是 Compare & Swap,现在几乎所有的CPU指令都支持CAS的原子操作,X86下对应的是 CMPXCHG 汇编指令。有了这个原子操作,我们就可以用其来实现各种无锁(lock 阅读全文
posted @ 2019-05-19 11:28 unique_ptr 阅读(1252) 评论(0) 推荐(0) 编辑
摘要:当调用closesocket关闭套接字时,SO_LINGER将决定系统如何处理残存在套接字发送队列中的数据。处理方式无非两种:丢弃或者将数据继续发送至对端,优雅关闭连接。事实上,SO_LINGER并不被推荐使用,大多数情况下我们推荐使用默认的关闭方式(即下方表格中的第一种情况)。 下方代码段显示li 阅读全文
posted @ 2019-05-19 11:21 unique_ptr 阅读(766) 评论(0) 推荐(0) 编辑
摘要:ET模式下每次write或read需要循环write或read直到返回EAGAIN错误。以读操作为例,这是因为ET模式只在socket描述符状态发生变化时才触发事件,如果不一次把socket内核缓冲区的数据读完,会导致socket内核缓冲区中即使还有一部分数据,该socket的可读事件也不会被触发根 阅读全文
posted @ 2019-05-19 11:16 unique_ptr 阅读(2553) 评论(1) 推荐(0) 编辑
摘要:利用 lsof -p +进程 id 查看该进程打开的文件描述符 利用lsof -i : +端口号 查看进程的信息 有些时候需要确定进程内部当前运行了多少线程,查询方法如下: 1)通过pstree命令(根据pid)进行查询: [root@xqsj_web2 ~]# ps -ef|grep java / 阅读全文
posted @ 2019-05-19 11:15 unique_ptr 阅读(564) 评论(0) 推荐(0) 编辑
摘要:通过eventfd实现的事件通知机制 通过eventfd实现的事件通知机制 eventfd的使用 eventfd系统函数 #include <sys/eventfd.h>int eventfd(unsigned int initval ,int flags ); 创建一个能被用户应用程序用于时间等待 阅读全文
posted @ 2019-05-19 00:00 unique_ptr 阅读(6717) 评论(0) 推荐(0) 编辑
摘要:时间轮 前文提到,基于排序链表的定时器存在一个问题:添加定时器的效率偏低。一种简单的时间轮如图所示: 在这个时间轮中,实线指针指向轮子上的一个槽(slot)。它以恒定的速度顺时针转动,每转动一步就指向下一个槽(slot)。每次转动称为一个滴答(tick)。一个tick时间间隔为时间轮的si(slot 阅读全文
posted @ 2019-05-13 14:08 unique_ptr 阅读(5176) 评论(0) 推荐(1) 编辑