Linux之多进程线程之Fork函数
《ARM 嵌入式 Linux系统开发详解》弓雷,讲的看不明白。经网上百度后谈下个人看法:
根据代码打印来看,fork函数创建后回执行两次后面代码
第一次蓝线,在父进程内,pid返回为子进程id,else内语句会被执行
第二次红线,在子进程内,pid返回为0,else if内语句会被执行
1、分叉操作在时间线(timeline)上创建了一个分支,最后得到了两个独立存在的进程。幸好进程可以判断哪个是原进程哪个是子进程(通过查看fork函数的返回值)。因此它们所执行的操作不同(如果相同,那么还有什么意义?)。
2、在一个使用分叉的服务器中,每一个客户端机连接都利用分叉创造一个子进程。父进程继续监听新的连接,同时子进程处理客户端。当客户端的请求结束时,子进程就退出了。因此分叉的进程是并行运行的,客户端之间不必互相等待。
3、因为分叉有点耗费资源(每个分叉出来的进程都需要自己的内存),这就存在了另一个选择:线程。线程是轻量级的进程或子进程,所有的线程都存在于相同的(真正的)进程中,共享内存。资源消耗的下降伴随着一个缺陷:因为线程共享内存,所以必须确保它们的变量不会冲突,如果在同一时间修改同一内容,这就会造成混乱。这些问题都可以归结为同步问题。在现代操作系统中(Windows除外,它不支持分叉),分叉实际是很快的,现代的硬件能比以往更好地处理资源消耗。如果不想被同步问题所困扰,分叉是一个很好的选择。
---------------------
作者:iw1210
来源:****
原文:https://blog.****.net/iw1210/article/details/51364729
版权声明:本文为博主原创文章,转载请附上博文链接!