多线程与多进程

一、多线程多进程的区别

参考《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. 如何将进程转化为守护进程,详见 守护进程化步骤

 

  

posted @ 2018-10-09 11:57  孜孜不倦的求学者  阅读(114)  评论(0编辑  收藏  举报