linux
文章平均质量分 87
ithiker
"All problems in computer science can be solved by another level of indirection."
展开
-
std::minmax使用的注意事项
文章目录预备知识问题介绍问题分析问题解决解决方案1解决方案2预备知识C++11中新增加了一个函数,std::minmax, 它可以获取两个或者多个元素的最大最小值。相比之前我们先用std::max求处最大值,再用std::min求出最小值,它的优势是可以一次遍历获得最大最小值。问题介绍最近在项目中遇到了一个比较诡异的问题,就是一个unittest在开发中使用的debug build进行运行时,没有问题,但是在release build进行运行时就会挂掉。debug build默认使用的是-O0,原创 2021-12-13 09:34:28 · 1962 阅读 · 2 评论 -
Linux上采用rdtsc指令对C/C++程序进行性能测试
RDTSC是什么RDTSC是 “Read Time-Stamp Counter”的缩写,它是目前intel和AMD的CPU都普遍支持的一条CPU指令,该指令可以把当前处理器的时间戳加载到EDX:EAX寄存器供外部使用。RDTSC的优点RDTSC是内置的CPU指令,而一般CPU单条指令运行也就需要几十个CPU cycles, 所以采用RDTSC指令可以在开销比较小的情况下获取程序的性能数据,可以说RDTSC是指令级别的性能测试利器。RDTSC的历史最初的RDTSC指令确实读取的是CPU自..原创 2021-08-29 17:30:39 · 4266 阅读 · 0 评论 -
Linux中的umask及权限管理
什么是umaskLinux中,“Every thing is a file”, 文件就涉及到文件权限管理,umask(user file-creation mode mask)的作用是用来设置每一个新增的文件、目录的权限(permission)。事实上,每个用户在登入系统时,都会有默认的umask,比如/etc/bashrc中:一般用户的umask默认是002, 其它特殊用户如系统进程等的umask是022。用户也可以在自己的bashrc文件中设置自己默认的umask。文件权限介绍在系统的b原创 2020-11-01 11:54:02 · 2614 阅读 · 1 评论 -
Modern Microprocessors A 90-Minute Guide
译者的话文章标题说是一篇90分钟的简介,在我看来,90分钟不一定能够读完,但是内容相当的精彩,完全值得读上180分钟:在提高单核的性能上:作者从处理器的频率出发,分析处理器为什么要引入流水线,为什么会出现超标量流水器,为什么需要乱序执行,为什么需要分支预测,流水线的深度是否越深越好,处理器的发射宽度是否越宽越好,是否乱序执行一定比顺序执行要好,业界主流CPU厂商是如何做的?继而分析了为什么单核...翻译 2019-07-21 22:56:42 · 1672 阅读 · 0 评论 -
记一次解决ubuntu18.04无法进入图形用户界面(GUI)的过程
最近尝试使用一个比较好用的Markdown软件vnote, 由于其release版本貌似托管在aws上,国内下载非常不方便. 虽然提供了百度网盘的下载地址,但是在Linux系统上又无法使用百度网盘客户端,于是尝试使用代码构建appimage, 发现代码目录下有一个.travis_linux.sh的脚本,看了下像是用来生成appimage,于是自己尝试运行该脚本,然后噩梦就开始了.重启系统后Lin...原创 2019-01-05 19:32:43 · 32411 阅读 · 2 评论 -
Using astyle to format code
As you know, we had our coding style which everyone should follow, and also we had the cpplint tool to check if we had followed the rule, but we do not have a tool to check and transfer our code to th原创 2017-03-05 20:51:30 · 1371 阅读 · 0 评论 -
自旋锁与互斥锁
自旋锁(spinlock)与互斥锁(mutex)是并发编程中两个重要的概念。它们的主要作用是:对共享资源加锁以阻止数据的并发访问,从而保证数据一致性。但是它们也有一些不同点。本文主要介绍这些不同点,并说明我们什么时候该用自旋锁取代互斥锁。理论基础理论上,当一个线程尝试去获取一个互斥锁,但由于该互斥锁已经被其它线程获取而没有成功时,它会立刻进入休眠状态,从而让出CPU时间,允许其它线翻译 2014-07-09 16:53:13 · 1537 阅读 · 0 评论 -
lsof的基本用法
当你在计算机上想启动一个服务,计算机却提示"port already in use",此时,可以使用lsof命令来查看那个进程占用了该端口(lsof -i:port). lsof是LiSt Open Files的缩写,在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。lsof的使用方法如下:qsun@qsun-VirtualBox:~原创 2014-06-30 10:07:44 · 1343 阅读 · 0 评论 -
SED单行脚本快速参考
-------------------------------------------------------------------------SED单行脚本快速参考(Unix 流编辑器) 2005年12月29日英文标题:USEFUL ONE-LINE SCRIPTS FOR SED (Unix stream editor)原标题:HANDY转载 2014-02-13 09:03:54 · 769 阅读 · 0 评论 -
poll,epoll,select比较分析
非阻塞 I/O 经常使用 poll(System V)、select(BSD Unix)、 epoll(linux2.5.45开始)系统调用。select系统调用select()的调用形式为: #include #include int select(int maxfd, /*要被检测的比特数,待检测的最原创 2013-10-20 23:31:33 · 1076 阅读 · 0 评论 -
采用epoll实现多客户server端
在Linux的帮助文档中,关于epoll帮助内容如下:man epollEPOLL(7) Linux Programmer's Manual EPOLL(7)NAME epoll原创 2013-10-20 16:28:12 · 1928 阅读 · 0 评论 -
采用select实现多客户服务端
服务端用fork来处理多个客户的思路是为每个客户创建一个新建的进程进行单独处理,也就是采取了多个服务器进程的方式,这在涉及到数据库的应用中不是最佳的解决方案。一般的解决方案是让单个服务器进程在不阻塞、不等待客户到达的情况下处理多个客户。采用select调用可以实现这一方案:select处理的核心是如何处理多个打开的文件描述符,由于是文件描述符,select的应用也不仅仅局限于套接字应用程序。原创 2013-10-20 11:06:55 · 1795 阅读 · 0 评论 -
采用fork实现多客户server端
一般的socket通信的过程是:服务器在接受来自客户的一个新连接时,会创建出一个新的套接字,而已有的监听套接字将继续接受来自客户端的请求并将它们放入队列中等待处理(调用accept处理)。 由accept获得的套接字描述符在主进程调用fork时,可以被子进程共享,因此,如果accept之后,在子进程中处理连接,在父进程中关闭套接字描述符,就可以处理一个客户端连接了。重复上述的过原创 2013-10-20 00:29:20 · 1946 阅读 · 0 评论 -
sudo su ; sudo root ; sudo - root的区别
最近在使用qingyun的ubuntu虚拟机做学习,碰到账号切换的问题,归纳一下: 创建好的ubuntu虚拟机默认有一个ubuntu的用户,也会自己设置密码;创建好后如何切到root呢,只可以sudo su切换完成 1. su与sudo 的区别: su 切换到某个用户,并使用该用户的环境变量,输入的是目标用户的密码 sudo原创 2013-10-18 17:01:04 · 5211 阅读 · 0 评论 -
采用nptl库编译程序
#include #include #include #include void *thread_function(void *arg);char message[] = "Hello World";int main() { int res; pthread_t a_thread; void *thread_result; res = pthrea原创 2013-10-15 22:00:50 · 1004 阅读 · 0 评论