我们要想启动一个进程,需要操作系统的调用(system call)。实际上操作系统和普通进程是运行在不同空间上的,操作系统进程运行在内核态(todo: kernel space),开发者运行的进程运行在用户态(todo: user space),这样有效规避了用户程序破坏系统的可能。如果用户态进程想执行内核态的操作,只能通过系统调用了。
fork 系统调用函数作用:创建一个子进程形式:pid_tfork(void);pid_t vfork(void);说明:使用 vfork 创子进程时,不会进程父进程的上下文返回值:[返回值=-1]子进程创建失败[返回值=0]子进程创建成功[返回值>0]对父进程返回子进程 PID #include <stdio.h>#include <sys/stat.h>#include <unistd.h>int main() { pid_t id = fork();
Sendfile是Linux实现的系统调用,可以通过避免文件在内核态和用户态的拷贝来优化文件传输的效率。其中大名鼎鼎的分布式消息队列服务Kafka就使用sendfile来优化效率,具体用法可参见其官方文档。优化策略在普通进程中,要从磁盘拷贝数据到网络,其实是需要通过系统调用,进程也会反复在用户态和内核态切换,频繁的数据传输在此有效率问题。
关注时代Java