答案 0 :(得分:2)
当你调用fork()并创建一个子元素时,在父和子之间调用fork之前所有描述符都在父元素中打开 shared 。例如父级中的套接字,并说父级调用accept,然后调用fork。然后在父级和子级之间共享连接的套接字。通常,孩子然后读取和写入连接的套接字,父母关闭连接的套接字。
在传统的UNIX模型中,当父进程需要由另一个实体执行的某些操作时,它会分叉子进程并让子进程执行处理。虽然这种模式多年来一直运作良好,但也存在一些问题:
fork 昂贵。内存从父级复制到子级,所有描述符都在子级中复制,依此类推。最近几天使用 copy-on-write 进行了一些优化,这避免了复制,直到孩子需要自己的副本。
虽然从父母到孩子的信息传递很容易,但反过来需要一些工作。并且为了实现传递信息,需要IPC(进程间通信)。
所以LINUX引入了clone()。 clone()允许子进程与调用进程共享其执行上下文的一部分,例如内存空间,文件描述符表和信号处理程序表。
然后是线程。它们也称为轻量级进程。您可以猜测,创建线程的速度比进程创建速度快10-100倍。进程中的所有线程共享相同的全局内存。这使得线程之间的信息共享变得容易,但同时需要同步访问。
总之,所有线程共享以下内容:
但每个帖子都有自己的: