`

何为并发

 
阅读更多

学习并发编程之前,先了解下何为并发?

 

"并发"在微观上不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行,从宏观外来看,好像是这些进程都在执行。

 

“并行”:常与并发有混淆的概念:

并行一般是指没有互斥和同步的情况下独立进行同时发生的事件。因此单CPU操作系统的进程/线程严格意义上来说都不能算是并行事件,毕竟它们都要使用同一个CPU,真正的并行出现在多处理器的计算机上,当进程/线程独立运行在不同的CPU上,而且没有不需要共享对象时。粗略的说,没有资源互斥共享的进程和线程都是并行的

 

--------------------------------------------------------------------------------------------

并发编程中,需要理清的概念还有线程,进程,多任务

 

进程是什么呢?直观的讲,进程就是正在执行的程序,一个进程通常就是一个正在执行的应用程序。从Windows角度讲,进程是含有内存和资源并安置线程的地方。进程中的资源可以包括文件句柄、线程、用户资源(对话框或字符串)、GDI资源(设备环境DC和画笔等)等。进程往往与一个任务挂钩,就像上面我们提到的“将”,操作系统负责分配资源让进程率领众线程完成某种任务。也是因此,Windows提供一个叫做“任务管理器”的工具可以让我们查看和管理进程。

所以准确的讲,进程就是一个可执行的程序一次运行的过程,它是系统进行资源分配和调度的一个独立单位。明白进程是系统进行资源分配和调度的单位非常重要,内存和CPU都是系统资源,当一个程序被调入内存开始执行时就变成了进程,此时操作系统便为其分配了这些相关的资源并且负责进行调度。进程是将,这个将直接对操作系统这个国王负责,国王可以分配给他一定的土地和俸禄(对应系统资源)并指派他去完成特定的任务。一个国家日理万机的大将可以有很多,这也就是操作系统多进程的概念,操作系统这个国王负责调兵遣将。

线程是操作系统分配处理器(CPU)时间的基本单元,是系统中最小的执行单元。如前所述,进程如将,线程如兵,操作系统创建并控制进程,进程包含和控制线程。我们知道国王和将帅自己并不去攻城掠地,他们只是坐阵指挥。那么实际上真正进行攻城掠地的是兵(线程)。兵也有自己的资源(系统会为线程初始化一个线程内核对象,还有一块1M左右的内存堆栈)。作为将要善于谋略,善于部署,善于将兵,拥兵十万不如精甲十千。作为兵要众志成城、竭尽全力去完成自己的任务。所以线程不可滥用,进程应当精简(一个进程只需做一个任务就够了)。

---------------------------------------------------------------------------------------------------

在多CPU的现代计算机中

在同一个时间里,同一个计算机系统中如果允许两个或两个以上的进程处于运行状态,这便是多任务。现代的操作系统几乎都是多任务操作系统,能够同时管理多个进程的运行。 多任务带来的好处是明显的,比如你可以边听mp3边上网,与此同时甚至可以将下载的文档打印出来,而这些任务之间丝毫不会相互干扰。那么这里就涉及到并行的问题,俗话说,一心不能二用,这对计算机也一样,原则上一个CPU只能分配给一个进程,以便运行这个进程。我们通常使用的计算机中只有一个CPU,也就是说只有一颗心,要让它一心多用,同时运行多个进程,就必须使用并发技术。实现并发技术相当复杂,最容易理解的是“时间片轮转进程调度算法”,它的思想简单介绍如下:在操作系统的管理下,所有正在运行的进程轮流使用CPU,每个进程允许占用CPU的时间非常短(比如10毫秒),这样用户根本感觉不出来CPU是在轮流为多个进程服务,就好象所有的进程都在不间断地运行一样。但实际上在任何一个时间内有且仅有一个进程占有CPU。 
如果一台计算机有多个CPU,情况就不同了,如果进程数小于CPU数,则不同的进程可以分配给不同的CPU来运行,这样,多个进程就是真正同时运行的,这便是并行。但如果进程数大于CPU数,则仍然需要使用并发技术。 
在Windows中,进行CPU分配是以线程为单位的,一个进程可能由多个线程组成,这时情况更加复杂,但简单地说,有如下关系: 

总线程数<= CPU数量:并行运行 

总线程数> CPU数量:并发运行 

并行运行的效率显然高于并发运行,所以在多CPU的计算机中,多任务的效率比较高。但是,如果在多CPU计算机中只运行一个进程(线程),就不能发挥多CPU的优势。 

 

---------------------------------------------------

那么在多CPU的硬件条件下,一个进程是不是会在多个CPU上运行呢?

其实这还是要明白  进程是系统进行资源分配和调度的单位  线程是操作系统分配处理器(CPU)时间的基本单元,是系统中最小的执行单元

一个进程被分配了独立的资源空间,但里面真正执行的还是一个一个线程,在运行一个进程的时候,它里的若干线程会被空间的CPU调度执行。 所以一个进程会在多CPU上运行,也就是你在一个多CPU上只行动一个程序,也会看到多CPU在不停的切换~

 

分享到:
评论

相关推荐

    SSM实战项目-Java高并发秒杀API

    何为秒杀? 所谓“秒杀”,就是网络卖家发布一些超低价格的商品,所有买家在同一时间网上抢购的一种销售方式。由于商品价格低廉,往往一上架就被抢购一空,有时只用一秒钟。 为何选择Java高并发秒杀作为实战项目?...

    浅谈Nginx10m+高并发内核优化详解

    何为高并发 默认的Linux内核参数考虑的是最通用场景,不符合用于支持高并发访问的Web服务器,所以需要修改Linux内核参数,这样可以让Nginx拥有更高的性能; 在优化内核时,可以做的事情很多,不过,我们通常会...

    操作系统基本概念——栈,堆,并发,进程

    操作系统基本概念——栈、堆、并发、进程 操作系统是计算机系统的核心组件之一,对计算机系统的性能和安全性至关重要。本文对操作系统的一些基本概念进行了介绍,包括栈、堆、系统并发、进程、线程等概念。 1. ...

    网络存储:何为主流?

    这种方式下,服务器成为数据存取的核心,所有的I/O请求都需通过服务器进行,导致可能的瓶颈问题,尤其是在高并发访问场景下。随着数据量的增加,DAS的局限性显现,例如服务器的I/O总线可能成为性能限制因素,且一旦...

    事业单位面试计算机基础知识简答题

    1.简述什么是进程? 参考答案:‌‌进程是‌计算机中的‌程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的...2.简述何为指令? 参考答案:指令是规定计算机执行一种操作的一组用二进制数表示的符号。

    seckill:SSM实战项目——Java高并发秒杀API,详细流程+学习笔记

    何为秒杀? 所谓“秒杀”,就是网络卖家发布一些超低价格的商品,所有买家在同一时间网上抢购的一种销售方式。由于商品价格低廉,经常一上架就被抢购一空,有时只用一秒钟。 为何选择Java高并发秒杀作为实战项目? ...

    seckill-master:SSM实战项目——Java高并发秒杀API,详细流程+学习笔记

    SSM实战项目——Java高并发秒杀API本文包括了项目的完整流程+开发过程中遇到的各种坑的总结+学习笔记和问题扩展,如果觉得README太长,我在blog里进行了分章,这是完成后的项目,(阿里云到期了orz)项目截图秒杀列表...

    计算机操作系统教程第三版答案作者左万历周长林.doc

    在单处理器传统中,可能发生的并行和并发现象如下:(2)进程与进程之间的并发。(3)处理机与设备之间的并行。(4)处理机与通道之间的并行。(5)通道与通道之间的并行。(6)设备与设备之间的并行。 12. 何谓...

    递归函数的可定义性和实现研究

    20世纪30年代,为解答“何为计算”、“何为可计算性”的根本问题,数学家们如Kleene、Church以及Turing各自提出了一般递归函数、λ演算与图灵机作为计算模型。尽管这些模型视角各异,分别从递归、函数抽象和状态机的...

    手把手带你构建大规模分布式服务--高并发、高可用架构系列,高质量原创好文!

    我从业之初接触到的便是一堆基于Webservice、Hessain等实现的跨语言的分布式系统,那是SOA架构和理念十分盛行的时代,我常常听到前辈们在谈论“SOA治理”等高大上的词,但我当时并没有理解何为“治理”,甚至在想:...

    构建高性能Web站点_PDF_45.5M

    8.2 何为反向 8.3 在反向代理上创建缓存 8.4 小心穿过代理 8.5 流量分配 第9章 Web组件分离 9.1 备受争议的分离 9.2 因材施教 9.3 拥有不同的域名 9.4 浏览器并发数 9.5 发挥各自的潜力 第10章 分布式缓存...

    java线程

    在深入探讨Java线程之前,我们首先需理解何为线程。线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。一个进程可以有多个线程,但至少有一个线程。在Java中,多线程编程是一...

    构建高性能Web站点(PDF)

    8.2 何为反向 8.3 在反向代理上创建缓存 8.4 小心穿过代理 8.5 流量分配 第9章 Web组件分离 9.1 备受争议的分离 9.2 因材施教 9.3 拥有不同的域名 9.4 浏览器并发数 9.5 发挥各自的潜力 第10章 分布式...

    构建高性能Web站点(PDF)-第2部分

    8.2 何为反向 8.3 在反向代理上创建缓存 8.4 小心穿过代理 8.5 流量分配 第9章 Web组件分离 9.1 备受争议的分离 9.2 因材施教 9.3 拥有不同的域名 9.4 浏览器并发数 9.5 发挥各自的潜力 第10章 分布式...

    EDA/PLD中的何为C语言关键字volatile

    `volatile` 关键字确保了程序的正确性,尤其是在涉及硬件交互、中断处理和并发编程的场景下。然而,它并不保证数据的完整性,比如在多线程环境中的同步问题,还需要配合其他机制,如锁(mutex)或信号量,来防止竞态...

    PostgreSQL 10.1 手册.html

    1. 何为PostgreSQL? PostgreSQL是以加州大学伯克利分校计算机系开发的POSTGRES, 版本 4.2为基础的对象关系型数据库管理系统(ORDBMS)。POSTGRES 领先的许多概念在很久以后才出现在一些商业数据库系统中。 ...

    PostgreSQL 10.1 中文手册.chm

    何为PostgreSQL? 2. PostgreSQL简史 3. 约定 4. 进一步的信息 5. 缺陷报告指南 I. 教程 1. 从头开始 2. SQL语言 3. 高级特性 II. SQL 语言 4. SQL语法 5. 数据定义 6. 数据操纵 7. 查询 8. 数据类型 ...

Global site tag (gtag.js) - Google Analytics