linux进程和线程的clone 创建。和线程调度

[b]Linux下进程和线程的创建都是通过clone实现的. clone函数功能强大,带了众多参数,
clone可以让你有选择性的继承父进程的资源,你可以选择想vfork一样和父进程
共享一个虚存空间,从而创造的是线程,你也可以不和父进程共享,你甚至可以选
择创造出来的进程和父进程不再是父子关系,而是 兄弟关系[/b]


pthread_create是基于clone实现的, 创建出来的其实是进程, 但这些进程与父进程共享很多东西,
共享的东西都不用复制给子进程, 从而节省很多开销, 因此,这些子进程也叫轻量级进程(light-weight process)

在linux中线程就是轻量级的进程
fork后, 子进程复制哪些东西
一句话总结, 就是所有 writeable 的东西都会复制.包括:
堆,栈, 数据段, 未初始化数据段, 打开的文件描述符,
信号安装过的handler, 共享库, ipc(共享内存,消息队列,信号量)
注意未决信号不会继承过来, 新进程会重置它的未决信号链 
子进程和父进程共享哪些东西
一句话总结, 就是所有 read-only 的东西都不用复制, 父子进程共享, 包括:
正文段和字符串常量 
哪些东西, 子进程不会从父进程继承
进程id, 各种锁(内存锁,文件锁), 定时器, 未决信号 


在操作系统中。一个用户级的线程如果对应一个系统级线程,就可以充分利用linux多核的特性。
但是在早期的linux版本中,linux用户级进程的多个线程对应一个系统级的进程,不能充分利用操作系统的特性!

猜你喜欢

转载自aircoder.iteye.com/blog/1738631