多线程与多进程
一、多线程多进程的区别
参考《C++ Concurrency in Action》
1.多进程
好处:
操作系统提供的进程间保护以及沟通措施(如文件,管道,信号,套接字socket),更容易编写安全的代码.
可以将不同进程分布在不同的机器上,并使用网络沟通。
坏处:
操作系统的保护,增加了沟通负担,沟通渠道要么搭建较复杂,要么效率不太高。
而且这些沟通措施往往不被C++ stdlib支持,需要使用平台相关的API,所以可能会导致代码不具有移植性。
多进程的附加负荷(overhead)较大,因为启动进程需要时间,系统分配额外的资源,系统管理额外的资源
2.多线程
好处:
变量共用,访问远比进程方便(可以直接传指针,引用),效率也高
系统不会进行额外保护,减少了程序的体积,使用的资源
坏处:
变量共用,容易导致数据损坏
二、创建进程
1.linux
linux使用函数fork()创建子进程。调用fork()函数调用成功,会使系统复制并创建一个子进程,两者此时同时运行。不同之处在于父进程(pp) 的fork()返回子进程(cp)的pid,而cp的fork()返回0。因此可以用一段判断区分父子进程的执行区。
pid_t pid = fork(); if(pid < 0){ //Error occurred. Handle it or exit. }else if(pid > 0){ //Parent process logic. }else{ // pid == 0 //Child process logic. }
子进程和父进程之间会继承大部分的handle,详见fork() man page. 如何将进程转化为守护进程,详见 守护进程化步骤。