创建子进程的速度应该是怎么样的?
如果父进程是redis,内存数据比如说有10G,需要考虑的有两个点:
①速度如何
②内存空间够不够
在Linux中有个系统调用--fork():
①速度:快
②空间:小
其实玩的就是指针的引用,能达到的效果就是创建速度很快,而且对内存空间要求不大。
计算机中的内存,可以把它理解成一个线性的字节数组byte[],运行的程序默认会认为整个计算机内存都是属于自己的,创建自己专属的虚拟地址到计算机真实内存地址的映射。比如程序中定义的一个变量a,会去内存中申请一块空间,在程序中会有一个虚拟的地址比如3,这个虚拟地址指向计算机的物理内存地址比如8,a存储的数据比如hello。fork就是拷贝主进程,变量a也会拷贝过去,同时拷贝的子进程中的变量a也会指向真是的物理地址8,其实也就相当于将指针也一起拷贝了,这样创建子进程会更快,在真实的物理内存中也只会只有一份hello。但此时,父子进程的数据的修改彼此都是不可见的,这是就涉及到另外一个技术:写时复制CopyOnWrite
写时复制CopyOnWrite:创建子进程并不发生复制。由于父子进程数据不同步,也不可能子进程将所有数据都修改一遍。实质上玩的是指针,如果要修改变量a的值,肯定在物理内存中必须现有一个新的值,直接将引用指向新的值即可。
这些东西不用死记硬背,直接使用man命令查看fork函数的实现即可知晓其底层实现原理:
man 2 fork;
使用/查找'copy':
Linux fork()函数底层CopyOnWrite写时复制实现原理剖析
猜你喜欢
转载自blog.csdn.net/a772304419/article/details/104076571
今日推荐
周排行