你是否真的懂 [程序的运行顺序] 多进程 / 进程池
linux 如何运行一个程序
linux 在运行任何程序之时,都要调用 execve 系统调用函数,然后把你的程序和你给的参数以及环境参数扔给程序的入口函数。
入口函数
php【php 脚本依赖 php 解释器】解释器运行,源码就是 c【真是废话,谁不知道,用我来逼逼半天】入口函数就是 main【如 mysql,redis,php,nodejs,python,memcached,apache 等】
图
该程序的代码,数据容量
测试源码
不管什么语言的源码【不必在意语言】,道理都一样的
class demo
{
public:
demo(int age,char *name):m_age(age),m_name(name){}
void run();
void child();
void parent();
public:
int m_age;
char *m_name;
pid_t pid;
int num[3];
};
void demo::child()
{
printf("child run %d==%d=%d\n",getpid(),pid,m_age);
while(1){
sleep(1);
printf("child run %d=%d=%d\n",getpid(),pid,m_age);
printf("我要访问demo类成员的数据\n");
printf("demo::m_name=%s\n",m_name);
printf("demo::m_age=%d\n",m_age);
printf("demo::pid=%d\n",pid);
for(int i=0;i<3;i++){
printf("demo::num[%d]=%d\n",i,num[i]);
}
}
}
void demo::parent()
{
printf("parent run %d=%d=%d\n",getpid(),pid,m_age);
while(1){
sleep(1);
printf("parent run %d=%d=%d\n",getpid(),pid,m_age);
printf("我要访问demo类成员的数据\n");
printf("demo::m_name=%s\n",this->m_name);
printf("demo::m_age=%d\n",this->m_age);
printf("demo::pid=%d\n",this->pid);
for(int i=0;i<3;i++){
printf("demo::num[%d]=%d\n",this->num[i]);
}
}
}
void demo::run()
{
cout<<"main process "<<getpid()<<" start"<<endl;
m_age=0;
for(int i=0;i<3;i++){
num[i] = i;//父进程可访问全部的值 123
pid = fork();//复制之时,子进程是得不到pid的内容的,而父亲运行时是返回它自己 所以一直不变
if(pid>0){
continue;
}
else if(pid==0){
m_age=i+1;
break;
}
}
}
int main()
{
demo *obj = new demo(100,(char*)"jack");
obj->run();
if(obj->m_age){
obj->child();
}else{
obj->parent();
}
return 0;
}
运行图解
多进程父子进程间的代码和数据在内存空间的图
只能截个大概
更多PHP内容请访问:
腾讯T3-T4标准精品PHP架构师教程目录大全,只要你看完保证薪资上升一个台阶(持续更新)