随笔分类 - 计算机基础
basic knowledge
摘要:通过共享内存通信是最快的,不过既然是共享资源,那么就必须要有同步机制。 创建共享内存有两种方式shm和mmap的方式。 shm的创建要确保原子性的话,可以通过重命名来做。 https://segmentfault.com/a/1190000000630435 这里用O_CREAT | O_EXCL来
阅读全文
摘要:最近恶补后端技术,发现还是很多不懂,一直写业务逻辑容易迷失,也没有成长。自己做系统,也习惯用自己已知的知识来解决,以后应该多点调研,学到更多的东西应用起来。 先学一个新的性能分析命令。 perf record子命令: 火焰图是基于 perf 结果产生的 SVG 图片,用来展示 CPU 的调用栈。 y
阅读全文
摘要:刚好这两天看了陈硕muduo和libevent2的对比代码,作些笔记。 https://blog.csdn.net/Solstice/article/details/5864889 https://github.com/chenshuo/recipes/tree/master/pingpong/li
阅读全文
摘要:https://www.pacificsimplicity.ca/blog/libevent-echo-server-tutorial 根据这一篇写一个最简单的demo。然后开始写client。 client调优 client最初的代码如下: 代码很简单,会发现有个问题,read这里会阻塞住不退出。
阅读全文
摘要:unix domain socket 关闭socket并不会删除文件,重复bind会失败。所以在bind之前要unlink该文件。 open服务器的实现只是简单地看了一下,大致上就是通过unix domain socket传递了打开的fd和相应的权限,而不是文件内容。数据通过sendmsg和recv
阅读全文
摘要:intel 都是小端,小端即最低有效字节在最低地址上。 tcp/ip协议栈使用大端字节序。 connect失败可能是一瞬时的,用指数补偿算法处理,exponential backoff。但是在bsd套接字实现中,不能这么处理,connect失败,需要关闭套接字,重新打开,这样才是可移植的。 使用du
阅读全文
摘要:在内部看到的评论, 觉得很有道理,记录下: 重构(名词):对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解下,降低其修改成本。 重构(动词):使用一系列重构手法,在不改变软件可观察行为的前提下,调整其结构。 软件工程中有个词叫 【software rot】 —— 代码腐烂
阅读全文
摘要:进程调试 自己写的代码,直接gdb r/bt就可以了。 正在运行的进程,先ps ax找到进程id。然后gdb进入之后attach 进程id。stop/continue暂停和继续进程。 core了,有core文件,就直接gdb core文件。 线程调试 https://stackoverflow.co
阅读全文
摘要:这里有个问题,父进程退出了,子进程还没退出。解决方案是在RunChild中调用: 可以查看下man 2 prctl。 https://stackoverflow.com/questions/284325/how-to-make-child-process-die-after-parent-exits
阅读全文
摘要:http://web.archive.org/web/20160430022340/http://google.github.io/styleguide/cppguide.html 主要注意几点:
阅读全文
摘要:https://coolshell.cn/articles/8239.html 主要讲的是《Implementing Lock-Free Queues》的论点,具体直接看论文最好。这里总结些要点。 CAS就是Compare And Swap。gcc可以调用: 这段代码讲出无锁的两个关键手段: 一个就
阅读全文
摘要:USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND 可以看到RSS,也就是物理内存占用,单位是KB。RSS是常驻内存集(Resident Set Size),表示该进程分配的内存大小。RSS不包括进入交换分区的内存。RSS包括共享库占用的内存
阅读全文
摘要:us, user: 运行(未调整优先级的) 用户进程的CPU时间 sy,system: 运行内核进程的CPU时间 ni,niced:运行已调整优先级的用户进程的CPU时间 wa,IO wait: 用于等待IO完成的CPU时间 hi:处理硬件中断的CPU时间 si: 处理软件中断的CPU时间 st:这
阅读全文
摘要:将进程与cpu绑定,最直观的好处就是减少cpu之间的cache同步和切换,提高了cpu cache的命中率,提高代码的效率。从cpu架构上,NUMA拥有独立的本地内存,节点之间可以通过互换模块做连接和信息交互,因此每个CPU可以访问整个系统的内存,但是访问远地内存访问效率大大降低,绑定cpu操作对此
阅读全文
摘要:pthread条件变量等待条件有两种方式:无条件等待pthread_cond_wait()和计时等待pthread_cond_timedwait(),其中计时等待方式如果在给定时刻前条件没有满足,则返回ETIMEOUT,结束等待,其中abstime以与time()系统调用相同意义的绝对时间形式出现,
阅读全文
摘要:signal 函数的使用方法简单,但并不属于 POSIX 标准,在各类 UNIX 平台上的实现不尽相同,因此其用途受 到了一定的限制。而 POSIX 标准定义的信号处理接口是 sigaction 函数。 signal函数每次设置具体的信号处理函数(非SIG_IGN)只能生效一次,每次在进程响应处理信
阅读全文
摘要:单一继承: 多重继承 转自:http://blog.csdn.net/haoel/article/details/3081328
阅读全文
摘要:什么是placement new? 所谓placement new就是在用户指定的内存位置上构建新的对象,这个构建过程不需要额外分配内存,只需要调用对象的构造函数即可。举例来说: pfoo指向的对象的地址你是不能决定的,因为new已经为你做了这些工作。第一步分配内存,第二步调用类的构造函数。 而pl
阅读全文
摘要:在程序设计中,尤其是在C语言、C++、C#和Java语言中,使用volatile关键字声明的变量或对象通常具有与优化、多线程相关的特殊属性。通常,volatile关键字用来阻止(伪)编译器认为的无法“被代码本身”改变的代码(变量/对象)进行优化。如在C语言中,volatile关键字可以用来提醒编译器
阅读全文
摘要:A shared_ptr<> is a mechanism to ensure that multiple object owners ensure an object is destructed, not a mechanism to ensure multiple threads can acc
阅读全文