多线程与多进程的区别

多线程与多进程的区别

ID:8806566

大小:23.85 KB

页数:7页

时间:2018-04-08

多线程与多进程的区别_第1页
多线程与多进程的区别_第2页
多线程与多进程的区别_第3页
多线程与多进程的区别_第4页
多线程与多进程的区别_第5页
资源描述:

《多线程与多进程的区别》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、进程:子进程是父进程的复制品.子进程获得父进程数据空间、堆和栈的复制品。线程:相对与进程而言,线程是一个更接近与执行体的概念,它可以与同进程的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。根本区别:用多进程每个进程有自己的地址空间,线程则共享地址空间。所以其他区别都是由此而来的:1、速度:线程产生的速度快,线程间的通讯快、切换快等,因为他们在同一个地址空间内。2、资源利用率:线程的资源利用率比较好也是因为他们在同一个地址空间内。3、同步问题:线程使用公共变量/内存时需要使用同步机制还是因为他们

2、在同一个地址空间内。很想写点关于多进程和多线程的东西,我确实很爱他们。但是每每想动手写点关于他们的东西,却总是求全心理作祟,始终动不了手。今天终于下了决心,写点东西,以后可以再修修补补也无妨。 一.为何需要多进程(或者多线程),为何需要并发?这个问题或许本身都不是个问题。但是对于没有接触过多进程编程的朋友来说,他们确实无法感受到并发的魅力以及必要性。我想,只要你不是整天都写那种intmain()到底的代码的人,那么或多或少你会遇到代码响应不够用的情况,也应该有尝过并发编程的甜头。就像一个快餐点的服务员,既

3、要在前台接待客户点餐,又要接电话送外卖,没有分身术肯定会忙得你焦头烂额的。幸运的是确实有这么一种技术,让你可以像孙悟空一样分身,灵魂出窍,乐哉乐哉地轻松应付一切状况,这就是多进程/线程技术。并发技术,就是可以让你在同一时间同时执行多条任务的技术。你的代码将不仅仅是从上到下,从左到右这样规规矩矩的一条线执行。你可以一条线在main函数里跟你的客户交流,另一条线,你早就把你外卖送到了其他客户的手里。 所以,为何需要并发?因为我们需要更强大的功能,提供更多的服务,所以并发,必不可少。 二.多进程什么是进程。最直

4、观的就是一个个pid,官方的说法就:进程是程序在计算机上的一次执行活动。说得简单点,下面这段代码执行的时候[cpp] viewplaincopyprint?int main()    {    printf(”pid is %d/n”,getpid() );    return 0;    }  进入main函数,这就是一个进程,进程pid会打印出来,然后运行到return,该函数就退出,然后由于该函数是该进程的唯一的一次执行,所以return后,该进程也会退出。 看看多进程。linux下创建子进程的调用

5、是fork();   [cpp] viewplaincopyprint?#include   #include     #include          void print_exit()  {         printf("the exit pid:%d/n",getpid() );  }    main ()   {      pid_t pid;      atexit( print_exit );      //注册该进程退出时的

6、回调函数        pid=fork();           if (pid < 0)                   printf("error in fork!");           else if (pid == 0)                   printf("i am the child process, my process id is %d/n",getpid());           else           {                 printf("

7、i am the parent process, my process id is %d/n",getpid());                 sleep(2);                wait();         }    }   iamthechildprocess,myprocessidis15806theexitpid:15806iamtheparentprocess,myprocessidis15805theexitpid:15805这是gcc测试下的运行结果。 关于fork函数

8、,功能就是产生子进程,由于前面说过,进程就是执行的流程活动。那么fork产生子进程的表现就是它会返回2次,一次返回0,顺序执行下面的代码。这是子进程。一次返回子进程的pid,也顺序执行下面的代码,这是父进程。(为何父进程需要获取子进程的pid呢?这个有很多原因,其中一个原因:看最后的wait,就知道父进程等待子进程的终结后,处理其task_struct结构,否则会产生僵尸进程,扯远了,有兴趣可以自己google)。如果fork

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。