多进程与多线程(多进程与多线程的场景)

什么是多进程

正在运行中的应用程序,通常称为进程。进程(Process)是计算机中的程序关于某数据集合上的一次执行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。进程是程序的基本执行实体,当你运行一个程序,你就启动了一个进程。

多进程与多线程(多进程与多线程的场景)

在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。

多进程与多线程(多进程与多线程的场景)

每个进程都有自己独立的地址空间(内存空间),每当用户启动一个进程时,操作系统就会为该进程分配一个独立的内存空间,让应用程序在这个独立的内存空间中运行。

在同一个时间里,同一个计算机系统中如果允许两个或两个以上的进程处于运行状态,这便是多进程,也称多任务。现代的操作系统几乎都是多任务操作系统,能够同时管理多个进程的运行。

多任务带来的好处是明显的,比如你可以边听mp3边上网,与此同时甚至可以将下载的文档打印出来,而这些任务之间丝毫不会相互干扰。

多进程与多线程(多进程与多线程的场景)

多进程优点:

1、每个进程互相独立,子进程崩溃没关系,不影响主程序的稳定性;

2、通过增加CPU,就可以容易扩充性能;

3、可以尽量减少线程加锁/解锁的影响,极大提高性能,就算是线程运行的模块算法效率低也没关系;

4、每个子进程都有2GB地址空间和相关资源,总体能够达到的性能上限非常大;

5、更好的多核伸缩性,进程的使用将许多内核资源(如地址空间,页表,打开的文件)隔离,在多核系统上的可伸缩性强于多线程程序。

多进程缺点:

1、逻辑控制复杂,需要和主程序交互;

2、需要跨越进程边界,如果有大数据量传送,就不太好,适合小数据量传送、密集运算 多进程调度开销比较大;

3、最好是多进程和多线程结合,即根据实际的需要,每个CPU开启一个子进程,这个子进程开启多线程可以为若干同类型的数据进行处理。当然你也可以利用多线程+多CPU+轮询方式来解决问题……

4、方法和手段是多样的,关键是自己看起来实现方便有能够满足要求,代价也合适。

什么是多线程

线程(英语:thread)是操作系统能够进行运算调度的最小单位,是一个轻量级的子进程,是最小的处理单元;是一个单独的执行路径。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

线程是独立的。如果在一个线程中发生异常,则不会影响其他线程。它使用共享内存区域。

多进程与多线程(多进程与多线程的场景)

多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理(Chip-level multithreading)或同时多线程(Simultaneous multithreading)处理器。在一个程序中,这些独立运行的程序片段叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理(Multithreading)”。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。

多线程是一种执行模型,它允许多个线程存在于进程的上下文中,以便它们独立执行但共享其进程资源。

同一进程中的多条线程将共享该进程中的全部系统资源,如虚拟地址空间,文件描述符和信号处理等等。但同一进程中的多个线程有各自的调用栈(call stack),自己的寄存器环境(register context),自己的线程本地存储(thread-local storage)。

多进程与多线程(多进程与多线程的场景)

多线程的优点:

1、无需跨越进程边界;

2、程序逻辑和控制方式简单;

3、高效的内存共享,数据共享,所有线程可以直接共享内存和变量等;

4、线程方式消耗的总资源比进程方式好。

多线程缺点:

1、每个线程与主程序共用地址空间,受限于2GB地址空间;

2、线程之间的同步和加锁控制比较麻烦;

3、一个线程的崩溃可能影响到整个程序的稳定性;

4、到达一定的线程数程度后,即使再增加CPU也无法提高性能,例如Windows Server 2003,大约是1500个左右的线程数就快到极限了(线程堆栈设定为1M),如果设定线程堆栈为2M,还达不到1500个线程总数;

5、线程能够提高的总性能有限,而且线程多了之后,线程本身的调度也是一个麻烦事儿,需要消耗较多的CPU。

多进程和多线程的区别

多进程与多线程(多进程与多线程的场景)多进程与多线程(多进程与多线程的场景)

多进程和多线程的最主要的区别就在资源共享,隔离问题。如果工作使用的内存较大,使用多线程可以避免CPU cache的换入换出,影响性能。

进程是资源分配的最小单位,线程是CPU调度的最小单位。我们按照多个不同的维度,来看看多进程和多线程的对比(注:都是相对的,不是说一个好得不得了,另一个差得无法忍受)

多进程与多线程(多进程与多线程的场景)

· 然后我们来看下线程和进程间的比较

子进程继承父进程的属性:

子线程继承主线程的属性:

实际用户ID,实际组ID,有效用户ID,有效组ID;

附加组ID;

进程组ID;

会话ID;

控制终端;

设置用户ID标志和设置组ID标志;

当前工作目录;

根目录;

文件模式创建屏蔽字(umask);

信号屏蔽和安排;

针对任一打开文件描述符的在执行时关闭(close-on-exec)标志;

环境;

连接的共享存储段;

存储映射;

资源限制;

进程中的所有信息对该进程的所有线程都是共享的;

可执行的程序文本;

程序的全局内存;

堆内存;

栈;

文件描述符;

信号的处理是进程中所有线程共享的(注意:如果信号的默认处理是终止该进程那么即使把信号传给某个线程也一样会将进程杀掉);

父子进程之间的区别:

子线程特有的:

fork的返回值(=0的子进程);

进程ID不同;

两个进程具有不同的父进程ID;

子进程的tms_utime,tms_stime,tms_cutime以及tms_ustime均被设置为0;

不继承父进程设置的文件锁;

子进程的未处理闹钟被清除;

子进程的未处理信号集设置为空集;

线程ID;

一组寄存器值;

栈;

调度优先级和策略;

信号屏蔽字;

errno变量;

线程私有数据;

1、需要频繁创建销毁的优先用线程。

实例:web服务器。来一个建立一个线程,断了就销毁线程。要是用进程,创建和销毁的代价是很难承受的。

2、需要进行大量计算的优先使用线程。 所谓大量计算,当然就是要消耗很多cpu,切换频繁了,这种情况先线程是最合适的。

实例:图像处理、算法处理。

3、强相关的处理用线程,弱相关的处理用进程。 什么叫强相关、弱相关?理论上很难定义,给个简单的例子就明白了。

实例:一般的server需要完成如下任务:消息收发和消息处理。消息收发和消息处理就是弱相关的任务,而消息处理里面可能又分为消息解码、业务处理,这两个任务相对来说相关性就要强多了。因此消息收发和消息处理可以分进程设计,消息解码和业务处理可以分线程设计。

4、可能扩展到多机分布的用进程,多核分布的用线程。

5、都满足需求的情况下,用你最熟悉、最拿手的方式。

至于”数据共享、同步“、“编程、调试”、“可靠性”这几个维度的所谓的“复杂、简单”应该怎么取舍,只能说:没有明确的选择方法。一般有一个选择原则:如果多进程和多线程都能够满足要求,那么选择你最熟悉、最拿手的那个。

6、在Linux下编程多用多进程编程少用多线程编程。

IBM有个家伙做了个测试,发现切换线程context的时候,windows比linux快一倍多。进出最快的锁(windows2k的 critical section和linux的pthread_mutex),windows比linux的要快五倍左右。当然这并不是说linux不好,而且在经过实际编程之后,综合来看我觉得linux更适合做high performance server,不过在多线程这个具体的领域内,linux还是稍逊windows一点。这应该是情有可原的,毕竟unix家族都是从多进程过来的,而 windows从头就是多线程的。

多线程比多进程成本低,但性能更低。在UNIX环境,多进程调度开销比多线程调度开销,没有显著区别,就是说,UNIX进程调度效率是很高的。内存消耗方面,二者只差全局数据区,现在内存都很便宜,服务器内存动辄若干G,根本不是问题。

多进程是立体交通系统,虽然造价高,上坡下坡多耗点油,但是不堵车。多线程是平面交通系统,造价低,但红绿灯太多,老堵车。我们现在都开跑车,油(主频)有的是,不怕上坡下坡,就怕堵车。

高性能交易服务器中间件,如TUXEDO,都是主张多进程的。

以上内容来源于网络,由“WiFi之家网”整理收藏!

原创文章,作者:电脑教程,如若转载,请注明出处:https://www.224m.com/225958.html

(0)
电脑教程电脑教程
e盘的数据丢失怎么找回(e盘丢失了怎么找回来)
上一篇 2022年10月26日 20:11
TPLink TLXDR3010易展版怎么使用? tlxdr3010路由器设置连网的技巧
下一篇 2022年10月27日 12:38

相关推荐

  • 路由器怎样取消静态设置(路由器怎样设置静态IP上网)

    路由器怎样取消静态设置(路由器怎样设置静态IP上网) 路由器是现代家庭网络中的必备设备,它可以方便地实现多台设备共享互联网,而设置路由器的IP地址也是网络配置的重要环节。但有时候我…

    网络 2023年10月26日
    1.2K
  • 华为路由器5280设置(华为路由器ws7200使用说明书)

    华为路由器5280设置(华为路由器ws7200使用说明书) 华为路由器5280是一款高性能的路由器,能够满足家庭或办公室的网络需求。以下是一些基本设置的说明。 1. 连接路由器 连…

    网络 2025年11月17日
    959
  • 手机静态IP怎么设置?手机固定IP设置方法(手机静态IP怎么设置?手机固定IP设置方法)

    本文介绍了手机静态IP的设置方法。关于静态IP,也叫作固定IP;如果我们的路由器设置的是IP地址限制上网,那么此时手机连接无线上网时,就需要相应的设置手机静态IP,那么手机应该怎么设置静态IP呢?下面简单为大家演示一下相关设置方法。 温馨提示:由于手机系统不同,

    2022年2月25日
    19.1K
  • 无法登陆路由器WEB管理界面?

    为什么我无法登陆路由器WEB管理界面? 答:这样的情况大致上分为四种: 一、内部IP与路由器IP冲突导致。 此时,我们需要将PC单独与路由器连接,脱离局域网来登陆路由器。登陆之后修改LAN口IP地址并保存,然后再接入到局域网中。 二、浏览器自身问题。 这样的典型就是别"

    2021年2月7日
    19.9K
  • 这样连接就不会导致路由器与光猫IP地址冲突了

    如果路由器的ip地址和猫的ip地址冲突了,会造成我们无法登录路由器,我们上网会频繁掉线,甚至无法上网。那该怎么办额?接

    常见问题 2020年8月27日
    13.1K
  • 带流量的路由器设置密码(路由器怎么设置密码)

    带流量的路由器设置密码 如今,越来越多的家庭都使用带流量的路由器进行网络连接。但是,如果不设置密码,会存在很大的安全隐患。那么,怎样才能给路由器设置密码呢?以下是详细步骤: 第一步…

    2023年11月7日
    420
  • Win7系统如何加快开机速度

    相信很多用户都和小编有同样的感受,就是自己电脑的开机、关机特别慢,跟人别的电脑一比简直就是垃圾,想必大家的第一想法就是重装系统吧,当然重装系统是一个好方法。新系统往往都跑的快,安装好新系统后电脑的反应确实要快很多,如果还想提升开机、关机速度,有没有办法能实现呢?方法步骤:1.打开注册表:在[开始]

    2021年9月7日
    9.4K
  • melogincn-melogin.cn搜不到自家wifi.

    melogincn本文目录melogin.cn搜不到自家wifi?melogin.cn进去把路由器无线开关给关了现在找不到网了?melogincn进不去登录界面?为什么路由器melogin.cn这个网站说域名出错?melogin.cn的密码可

    2023年4月9日
    1.4K
  • 家里wifi就我一个人不能用-为什么家里wifi家人可以,别人不行.

    家里wifi就我一个人不能用本文目录为什么家里wifi家人可以,别人不行?我的Wifi为什么只能一个人用,第二个人就算连上了也上不了网,我没有设置任何东西,这是怎么回事?为什么我家WiFi只有我一个人能用、别人无法加入?为什么和别人连接同一个WIFI别人上的了网,我却不行?为什

    2023年6月20日
    4.4K
  • 路由器设置的网页打不开(路由器设置ip地址怎么设置)

    路由器设置的网页打不开 当您在使用路由器连接网络时,如果您无法打开路由器的设置网页,可能会出现许多问题。有时,您可能会遇到无法找到服务器或连接超时等错误。 如果您遇到这种情况,请不…

    网络 2023年12月18日
    552