多线程和多进程之间的区别

(重点 一个问题最令人关注的面试官。必须从cpu调度,上下文切换。数据共享,多核cup采用,脚印,等答案的方方面面。再有一个问题,即必须要问:这件事是一个私人的线程?答案必须列入登记册,否则,悲催)

可重入:概念基本没有比較正式的完整解释。可是它比线程安全要求更严格。

依据经验,所谓“重入”,常见的情况是,程序运行到某个函数foo()时,收到信号。于是暂停眼下正在运行的函数,转到信号处理函数,而这个信号处理函数的运行过程中。又恰恰也会进入到刚刚运行的函数foo(),这样便发生了所谓的重入。此时假设foo()可以正确的运行,并且处理完毕后,之前暂停的foo()也可以正确运行,则说明它是可重入的。

线程安全的条件:

要确保函数线程安全,主要须要考虑的是线程之间的共享变量。属于同一进程的不同线程会共享进程内存空间中的全局区和堆。而私有的线程空间则主要包含栈和寄存器

因此,对于同一进程的不同线程来说,每一个线程的局部变量都是私有的。而全局变量、局部静态变量、分配于堆的变量都是共享的。在对这些共享变量进行訪问时,假设要保证线程安全,则必须通过加锁的方式。

可重入的推断条件:

要确保函数可重入,需满足一下几个条件:

1、不在函数内部使用静态或全局数据

2、不返回静态或全局数据,全部数据都由函数的调用者提供。

3、使用本地数据。或者通过制作全局数据的本地拷贝来保护全局数据。

4、不调用不可重入函数。

关于线程的堆栈

说一下线程自己的堆栈问题。

是的,生成子线程后,它会获取一部分该进程的堆栈空间,作为其名义上的独立的私有空间。(为何是名义上的呢?)由于,这些线程属于同一个进程,其它线程仅仅要获取了你私有堆栈上某些数据的指针,其它线程便能够自由訪问你的名义上的私有空间上的数据变量。(注:而多进程是不能够的,由于不同这个过程,相同的虚拟地址,不太可能映射到相同的物理地址)

版权声明:本文博客原创文章。博客,未经同意,不得转载。

时间: 2024-10-11 05:11:36

多线程和多进程之间的区别的相关文章

多线程和多进程之间的区别(总结)

多线程的东西.我确实非常爱他们.可是每每想动手写点关于他们的东西.却总是求全心理作祟.始终动不了手. 今天最终下了决心.写点东西,以后能够再修修补补也无妨. 一.为何须要多进程(或者多线程),为何须要并发? 这个问题也许本身都不是个问题.可是对于没有接触过多进程编程的朋友来说,他们确实无法感受到并发的魅力以及必要性. 我想.仅仅要你不是整天都写那种int main()究竟的代码的人,那么或多或少你会遇到代码响应不够用的情况,也应该有尝过并发编程的甜头. 就像一个快餐点的服务员,既要在前台接待客户

【Linux】多进程与多线程之间的区别

http://blog.csdn.net/byrsongqq/article/details/6339240 网络编程中设计并发服务器,使用多进程与多线程 ,请问有什么区别?  答案一: 1,进程:子进程是父进程的复制品.子进程获得父进程数据空间.堆和栈的复制品. 2,线程:相对与进程而言,线程是一个更加接近与执行体的概念,它可以与同进程的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列. 两者都可以提高程序的并发度,提高程序运行效率和响应时间. 线程和进程在使用上各有优缺点:线程执行开

多线程和多进程的区别与联系

1.单进程单线程:一个人在一个桌子上吃菜.2.单进程多线程:多个人在同一个桌子上一起吃菜.3.多进程单线程:多个人每个人在自己的桌子上吃菜. 多线程的问题是多个人同时吃一道菜的时候容易发生争抢,例如两个人同时夹一个菜,一个人刚伸出筷子,结果伸到的时候已经被夹走菜了...此时就必须等一个人夹一口之后,在还给另外一个人夹菜,也就是说资源共享就会发生冲突争抢. 1.对于 Windows 系统来说,[开桌子]的开销很大,因此 Windows 鼓励大家在一个桌子上吃菜.因此 Windows 多线程学习重点

多线程和多进程的区别【转载网络】

在Unix上编程采用多线程还是多进程的争执由来已久,这种争执最常见到在C/S通讯中服务端并发技术 的选型上,比如WEB服务器技术中,Apache是采用多进程的(perfork模式,每客户连接对应一个进程,每进程中只存在唯一一个执行线程), Java的Web容器Tomcat.Websphere等都是多线程的(每客户连接对应一个线程,所有线程都在一个进程中). 从Unix发展历史看,伴随着Unix的诞生进程就出现了,而线程很晚才被系统支持,例如Linux直到内核2.6,才支持符合Posix规范的NP

多线程和多进程的区别

(重点 面试官最最关心的一个问题,必须从cpu调度,上下文切换,数据共享,多核cup利用率,资源占用,等等各方面回答,然后有一个问题必须会被问到:哪些东西是一个线程私有的?答案中必须包含寄存器,否则悲催) 可重入:概念基本没有比较正式的完整解释,但是它比线程安全要求更严格.根据经验,所谓"重入",常见的情况是,程序执行到某个函数foo()时,收到信号,于是暂停目前正在执行的函数,转到信号处理函数,而这个信号处理函数的执行过程中,又恰恰也会进入到刚刚执行的函数foo(),这样便发生了所谓

多线程和多进程的区别(C++)

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

多线程与多进程的区别

鱼还是熊掌:浅谈多进程多线程的选择 关于多进程和多线程,教科书上最经典的一句话是"进程是资源分配的最小单位,线程是CPU调度的最小单位",这句话应付考试基本上够了,但如果在工作中遇到类似的选择问题,那就没有这么简单了,选的不好,会让你深受其害. 经常在网络上看到有的XDJM问"多进程好还是多线程好?"."Linux下用多进程还是多线程?"等等期望一劳永逸的问题,我只能说:没有最好,只有更好.根据实际情况来判断,哪个更加合适就是哪个好. 我们按照多

老男孩教育每日一题-2017年3月23日-请问多线程与多进程的区别,在什么时候用线程或进程更合适?

解答: 进程: 优点:多进程可以同时利用多个CPU,能够同时进行多个操作. 缺点:耗费资源(创建一个进程重新开辟内存空间). 进程不是越多越好,一般进程个数等于cpu个数. 线程: 优点:共享内存,尤其是进行IO操作(网络.磁盘)的时候(IO操作很少用cpu),可以使用多线程执行并发操作. 缺点:抢占资源. 线程也不是越多越好,具体案例具体分析,切换线程关系到请求上下文切换耗时. 计算机中执行任务的最小单元:线程. IO密集型(不用cpu):多线程 计算密集型(用cpu):多进程 网友精品回答:

java创建多线程方法之间的区别

我们知道java中创建多线程有两种方法(详见http://blog.csdn.net/cjc211322/article/details/24999163).那么两者有什么区别呢? 一.情形一 code1 /** * ThreadTestDemo.java * @author cjc * */ public class ThreadTestDemo { public static void main(String[] args) { Ticket t=new Ticket(); t.start(