https://blog.csdn.net/hunter___/article/details/83016461
https://blog.csdn.net/hunter___/article/details/83022983
b2g 进程主线程b2g thread 经过b2g loader,保存或加载各必备资源,完成后。开始runprocess,即开始运行新的进程,开始fork操作(这里用了socket pair)。b2g 和 nuwa,fork的位置在比较前,所以,nuwa fork后只复制了必备且不影响b2g的部分(fork时子进程获得父进程数据空间、堆和栈的复制,所以变量的地址(当然是虚拟地址)也是一样的。)
也即是先复制了一个同b2g process 一样的进程(此时的b2g 还只是一个b2g单线程的进程),现在还不是nuwa ,暂且叫它preNuwa(前nuwa 进程,成为nuwa之前的进程)。
下面兵分两路:
1.b2g process
b2g 一路一波很猛的操作走下去,创建了各类核心线程。(在那部分创建的哪些线程)
做了一大波操作,XRE_mainStartup,XRE_InitCommandLine,NS_InitXPCOM2等等
NS_InitXPCOM2操作后,开始XRE_MainRun,cmdLine->Run()等各种看不明白的操作,(目前为止还没有b2g进程的其他线程露面,也不知是否在上面的那些操作中已经创建好了这些线程),也不知是否是在commandline这里通过命令行方式一个个启动的???
总之,commandline之后就开始出现b2g 新线程的身影了。如下的imgio ,线程id 666,创建最高层的window窗口,并也开始startupapp,runnuwaprocess.
同时发现,nuwa将其(imageio)标记为支持nuwa的线程.
接着contentparent做了重要的操作,目前也只是在b2g 线程中,b2g 开始请求launch subprocess,即启动子进程,并为其准备,好,下面来了一个新线程,
新线程是 b2g 进程下的Gecko_IOThread 线程,tid为579,以此推断,前面在某处已经启动了这一系列线程,根据tid大小推断。
以上Log表明它(gecko io thread 线程)创建通道,并请求lauchapp,LaunchAppProcLoader(这里的app是nu