Linux如何实现共享内存

Posted by 夏泽民

为什么实现共享内存? 采用共享内存通信的一个显而易见的好处是效率高,因为进程可以直接读写内存,而不需要任何数据的拷贝。对于像管道和消息队列等通信方式,则需要在内核和用户空间进行四次的数据拷贝,而共享内存则只拷贝两次数据[1]:一次从输入文件到共享内存区,另一次从共享内存区到输出文件。实际上,进程之间在共享内存时,并不总是读写少量数据后就解除映射,有新的通信时,再重新建立共享内存区域。而是保持共享区域,直到通信完毕为止,这样,数据内容一直保存在共享内存中,并没有写回文件。共享内存中的内容往往是在解除映射时才写回文件的。因此,采用共享内存的通信方式效率是非常高的。



cgroup

Posted by 夏泽民

cgroup从2.6.4引入linux内核主线,目前默认已启用该特性。在cgroup出现之前,只能对一个进程做资源限制,比如通过sched_setaffinity设置进程cpu亲和性,使用ulimit限制进程打开文件上限、栈大小等。



编写可测试 Go 代码的一种模式

Posted by 夏泽民

https://blog.betacat.io/post/2020/03/a-pattern-for-writing-testable-go-code/ UT(单元测试)是个好东西,我们每个人都爱它。当写完一段功能复杂的逻辑时,各种变态的测试样例能增强我们对这段逻辑的信心;当更改别人的代码时,好的 UT coverage 能帮我们确保这次的更改不会影响到其他的代码;当阅读别人代码时,相应的 UT 也是一份文档,能告诉我们这段代码所实现的功能。因此我们总是希望别人的代码能有 UT,但自己却很少写 UT,这是为什么呢?🤔



tcp

Posted by 夏泽民

tcp向上层提供的数据肯定是按顺序排好的。比如一共有1 2 3 4 5五个包,假设前3个包的大小可以填满tcp的缓冲区,那么如果第4个包丢失,这时候并不会影响应用层接收前三个包。而如果是前三个包里面发生丢失,即使4 5都正常接收也不行,因为前面还有包没有收到,这时候tcp是不会向上层提供数据的。



Go语言如何实现stop the world

Posted by 夏泽民

https://mp.weixin.qq.com/s/gNAani93Xrb02oDsgDc1fQ 在某些垃圾回收器算法中,“停止世界”(Stop the World: STW,下同)是跟踪内存使用最重要的阶段,它会停止程序的执行,以扫描内存使用,并添加写障碍。让我们回顾一下它在内部如何工作,以及它可能面临的潜在问题。 停止世界(Stop the world) 停止程序意味着停止所有正在运行的 goroutine。下面是一个执行 STW 的简单程序:



Search

Popular posts

Anything in here will be replaced on browsers that support the canvas element

Recent posts

This blog is maintained by 夏泽民

Get in touch with me at 465474307@qq.com

Subscribe to our mailing list

* indicates required