摘要: 最近忽然被问到一个问题:程序A打开了文件a.txt,程序B覆盖了a.txt,那这时候程序A读取到的内容是怎么样的?是读取到旧内容,还是新内容,或者是半新半旧? 为了解答这个问题,得先明白系统的文件管理机制。以Linux为例,文件属于一种资源,它是由系统内核统一管理的。操作文件也只能是通过内核的系统调 阅读全文
posted @ 2024-11-09 17:33 coding my life 阅读(9) 评论(0) 推荐(0) 编辑
摘要: 最近在开发新项目,使用的是旧的代码,因此要进行一些代码的删减和优化。在win下开发时,一切正常,但在Linux下,发现其中一个模块在启动时会偶发性无缘无故中止,没有异常日志,没有core dump,内核那边也没有异常,进程直接就消失了。 我以为是系统环境变量没设置好,但使用命令ulimit -a查看 阅读全文
posted @ 2023-04-12 20:42 coding my life 阅读(120) 评论(0) 推荐(0) 编辑
摘要: 最近发现线上有个服务器某些逻辑耗时比较久,问了下同事,他告诉我是因为lua的pairs函数很慢导致的。 “啊!不至于吧,这数据量才多少”我一脸诧异,记忆中Lua不至于慢到这种程度,遍历个几十万的table速度还是很快的,而我们线上的这个table数据量才几万。 他把线上的数据导了出来,做了一个测试, 阅读全文
posted @ 2022-12-18 21:29 coding my life 阅读(598) 评论(0) 推荐(0) 编辑
摘要: 在游戏服务器当中,通常都会为每个客户端链接设置一个缓冲区。这样做的理由是游戏中通常会有持续不断,零碎的数据包发送到客户端,使用一个缓冲区可以把这些数据包攒到一起发送,避免频繁的io操作;另一个原因是,处理游戏逻辑的线程通常和io操作的线程是分开的,因此游戏逻辑线程把数据放到缓冲区后可以继续处理后续的 阅读全文
posted @ 2022-05-06 23:19 coding my life 阅读(596) 评论(0) 推荐(0) 编辑
摘要: #include <iostream> #include <chrono> #include <ctime> int main() { const int ts = 1000000; std::chrono::steady_clock::time_point beg; std::chrono::st 阅读全文
posted @ 2022-04-23 16:09 coding my life 阅读(2124) 评论(0) 推荐(0) 编辑
摘要: 一个已进入维护状态多年的项目最近我做了一些优化,没想到更新出去后程序直接起不来了,core dump的文件显示程序因为Program terminated with signal 4, Illegal instruction.直接挂掉。第一次看到这个错误的我有点懵,从字面上理解“Illegal in 阅读全文
posted @ 2022-04-16 16:29 coding my life 阅读(1865) 评论(0) 推荐(0) 编辑
摘要: 我经常用虚拟机装各种版本的Linux系统来跑程序,一般硬盘分得比较小。比如CentOS 6就只分了16G,跑的是服务端的程序,不用安装界面,整个系统也就占3G不到,一般也够用。直到某一天,我需要把一个20G的sql脚本导入到数据库里。这才发觉自己从来没做过Linux的硬盘扩容,一番鼓捣之后,做个笔记 阅读全文
posted @ 2022-04-01 22:04 coding my life 阅读(2578) 评论(0) 推荐(0) 编辑
摘要: 业务逻辑写多了,有些基础的东西就忘了,写在这里仅仅是做个笔记。 最近要把自己的程序改成多线程,其中有一个缓冲区类,大概是这样的: class Buffer { public: /** * 获取当前缓冲区中已分配的chunk数量及总内存,用于统计 */ void get_mem_info(int& c 阅读全文
posted @ 2022-03-20 17:39 coding my life 阅读(896) 评论(1) 推荐(1) 编辑
摘要: CentOS 6早已退休,没人维护了,但最近需要测试一个很老的服务器程序,要跑在CentOS 6上,那就在VirtualBox虚拟机上装一个吧。由于测试环境是不能上网的,因此我特意下载了一个CentOS-6.10-x86_64-bin-DVD1.iso镜像,这样不仅安装系统不需要连网,安装一些基本的 阅读全文
posted @ 2022-03-16 00:46 coding my life 阅读(882) 评论(0) 推荐(0) 编辑
摘要: 最近在优化自己以前写的一个程序,其中io部分由单线程的Reactor模型改成多线程的Proactor模型。即原来是异步io事件唤醒线程,进行io读写,现在是一个线程进行异步io读写,然后把数据交给另一个线程进行逻辑处理。那这就涉及到一个线程数据交换的问题,由于是io数据,这个需要交换的数据还比较大, 阅读全文
posted @ 2022-01-08 18:09 coding my life 阅读(1435) 评论(0) 推荐(1) 编辑