码农的荒岛求生

其他

函数运行时在内存中是什么样子?

我们在上一篇文章《高性能高并发服务器是如何实现的》中提到了一项关键技术——协程,你知道协程的本质是什么吗?有的同学可能会说是用户态线程,那么什么是用户态线程,这是怎么实现的?3.
2020年11月16日
其他

高并发高性能服务器是如何实现的

loop中要做的事情其实是非常简单的,只需要等待event的带来,然后调用相应的event处理函数即可。注意,这段代码只需要运行在一个线程或者进程中,只需要这一个event
2020年11月9日
其他

10张图让你彻底理解回调函数

GetServiceD(c);代码很清晰,很容易理解有没有。我们知道异步回调的方式会更加高效,那么使用异步回调的方式来写将会是什么样的呢?GetServiceA(function(a){
2020年10月28日
其他

从小白到高手,你需要理解同步与异步(内含10张图)

邮件是另一种必不可少沟通方式,因为没有人傻等着你写邮件什么都不做,因此你可以慢慢悠悠的写,当你在写邮件时收件人可以去做一些像摸摸鱼啊、上个厕所、和同时抱怨一下为什么十一假期不放两周之类有意义的事情。
2020年10月12日
其他

终于明白了,一文彻底理解I/O多路复用

有了文件描述符,进程可以对文件一无所知,比如文件在磁盘的什么位置、加载到内存中又是怎样管理的等等,这些信息统统交由操作系统打理,进程无需关心,操作系统只需要给进程一个文件描述符就足够了。
2020年9月21日
其他

意想不到,这个神奇的bug让我加班到深夜

上线前照例忐忑不安了一番,因为工程量比较大,预估可能不会很顺利,但还不至于到了祈祷服务器不要出bug的地步,bug对于程序员来说简直是家常便饭,没有bug反而可能会嘀咕半天,这都是职业病,没治。
2020年9月14日
其他

读取文件时,程序经历了什么?

承接上文《一文彻底理解高性能高并发中的线程与线程池》,这是高性能、高并发系列的第二篇文章,在这里我们来到了I/O这一话题。
2020年9月7日
其他

看完这篇还不懂高并发中的线程与线程池你来打我(内含20张图)

注意是函数,函数被编译后才会形成CPU执行的指令,那么很自然的,我们该如何让CPU执行一个函数呢?显然我们只需要找到函数被编译后形成的第一条指令就可以了,第一条指令就是函数入口。
2020年8月31日
其他

假如特朗普是一门编程语言

同时这门语言不支持网络功能,因为不需要加入各种组织和它们交流,就是要各种花式退群,它们只是变着法儿的在占美国便宜,所以Ctrump不支持网络,休想通过TCP/IP连接过来。
2020年8月18日
其他

程序员应如何理解系统调用:下篇

API)就可以了。操作系统通过系统调用对用户程序屏蔽了底层细节,通过这种机制,操作系统实现了多任务、虚拟内存等重要功能,在后续的章节中我们会详细讲解这些功能是如何实现的。
2019年9月17日
其他

程序员应如何理解系统调用:上篇

我们知道操作系统提供了很多功能,因此有很多系统调用,Windows中有上千个,Linux中较有几百个。不知道大家有没有注意到一点,那就是操作系统怎么知道要执行的是write系统调用呢?
2019年9月10日
其他

系统调用是如何实现的

我们知道囚犯被关在监牢里面,其活动范围只能局限在监牢这个狭小的范围内,如果囚犯试图越狱的话会触发监狱的警报,这时警察就会立即将囚犯抓回到监狱(这里我们不考虑电影肖申克的救赎中安迪这类越狱的情况
2019年9月3日
其他

操作系统是如何看待进程的

实际上看似简单的HelloWorld程序,实际运行起来非常不简单,这是一个比较复杂的过程,我们们能在屏幕上看到“HelloWorld”这几个字符需要用户程序,操作系统,硬件三方通力合作才能实现。
2019年8月27日
自由知乎 自由微博
其他

程序员应如何理解CPU:下篇

既然每个进程都有了自己的CPU,那么这些进程就可以同时运行啦,这就是我们熟悉的多任务(MultiTasking)。我们会在后面的文章《操作系统如何管理进程》中详细讲解操作系统是到底如何做到这一点的。
2019年8月23日
其他

程序员应如何理解CPU:上篇

通常情况下,寄存器对程序员都是不可见的,所谓对程序员不可见也就是说程序员不能利用编程语言来操作这些寄存器。只有汇编语言才能操作寄存器,高级语言比如C/C++、Java都不能直接对寄存器进行编程。
2019年8月21日
其他

程序员应如何理解内存:下篇

每个进程独占一个连续的4G大小的内存,从内存地址0开始,一直到0xffffffff,其中最上方的1G留给了操作系统使用,下方的3G是留给进程自己使用的,其中程序员可以操作的区域就是图中的堆区和栈区。
2019年8月16日
其他

程序员应如何理解内存:中篇

C/C++分配内存是直接在物理内存中进行的,而Java、Python等程序是将内存分配请求交给解释器,解释器再去物理内存上进行分配。希望大家务必理解这一点。
2019年8月14日
其他

程序员应如何理解内存:上篇

从图中我们可以看出,f2在执行完毕后,f2所占用的内存就被回收了,所谓“回收”就是这块内存又可以用作其它用途了。f1执行完毕后所占用的内存同样也被回收,这样我们就又回到了main()函数中。
2019年8月13日
其他

程序?进程?傻傻分不清

这点大家应该都非常熟悉,在Windows中我们通过双击程序图标,在Linux下直接键入程序的名字。但是这个回答大家可能并不满意,因为计算机的角度上看我们依然不清楚程序是如何运行起来的。
2019年7月21日
其他

什么是程序?

至此,我们知道程序员(人类)和计算机是两个完全不同的物种,不同的物种能理解的语言是完全不同的,就好比普通的人不会明白一群鸟语在说什么一样,我们人类也不能打开vim或者宇宙无敌IDE——Visual
2019年7月6日
其他

彻底理解链接器:一,前言

如果你还不能很好的解决上面前两个问题且对于问题三属于B,那么接下来你就要好好看这篇文章啦,解决这几个问题的关键就是这篇文章要介绍的链接器(Linker),虽然现代的集成开发环境IDE比如Visual
2018年9月19日