`
ziwuzu
  • 浏览: 53126 次
  • 性别: Icon_minigender_1
  • 来自: 长春
社区版块
存档分类
最新评论

并发编程概观

阅读更多

一.并发编程是什么

    与串行编程对应,串行编程只有一个执行流,而并发编程有多个执行流。

 

二.并发编程为什么

    根源在于Amdahl ‘s law,可以通过并行化来提高计算速度,提高的比率为1/(p+(1-p)/n),其中p为无法并行的百分比,n为并行轨道。

    对一个程序,要分析每个部分使用的资源,cpu,内存,io(硬盘、网络、人)。

 

    对计算密集型程序,提高cpu使用率,比如原来串行编程只有一个执行流,只用了cpu的一个核,现在并发了,可以用好几个cpu了。

    对IO密集型程序,提高IOCPU的使用率,比如原来我要抓一个html页面上的所有东西,如果单个单个的去抓,每次我都等上一个完结才可以进行下一个;现在并发了,同时起好几个线程,当一个线程在等网络io的时候,另一个线程可以继续发送请求。这样IO的利用率得到了提高,我抓页面的速度也快了。

    对WEB服务器,如果顺序处理所有用户的请求,由于程序执行过程中用到的资源有CPU的时间片,硬盘,网络,数据库,当处理调用网络接口或等待数据库时,CPU是空闲的,另外网络和数据库的处理能力一般也不是饱和的。如果采用并发编程,网络带宽和CPU空闲时间可以得到充分利用。总的处理时间缩短了。

 

三.并发编程的问题

    问题就是现在有多个执行流了,他们之间的交互怎么办,共享的一些资源怎么办,即协同,竞争问题。

而这两个问题的解决方案,又可能引发其他问题,比如:死锁,饥饿,性能下降。

还有容易引入的BUG,比如竞态条件(race condition

 

四.并发编程的常用解决方案

    最重要的是不要有共享变量的操作,比如每个线程只操作线程私有的变量,局部变量。

    然后利用已经有的并发机制,比如web服务器,数据库。

    然后利用语言中已经有的并发机制。

对于竞争,最常用的方案是锁,在用这个资源之前,必须申请锁,不然就阻塞

对于协同,想起一种是信号量,比如一个线程A要等另一个线程B完成一个操作才能继续往下执行,这个时候如果条件不符,线程A可以等待,直到线程B发信号说明操作完成。或者线程A不停地去查看线程B有没有操作完成。

        

分享到:
评论

相关推荐

    概观C++与java程序设计语言的特征

    Java支持原生多线程编程,这意味着开发者可以直接在Java程序中创建多个线程并发执行任务,这对于提高程序性能非常关键。 **5. 分布性** Java支持分布式计算环境,使得开发者能够轻松地构建分布式应用程序。通过...

    java深度历险4

    学习如何创建和管理线程,理解同步机制(如synchronized关键字、Lock接口)以及并发工具(如Semaphore、CountDownLatch),是成为高级Java开发者的必备知识。 此外,异常处理、IO流、网络编程、反射等也是Java深度...

    第一讲windows程序设计ppt课件.ppt

    【Windows程序设计概观】 Windows程序设计主要涉及与操作系统交互,理解其基本原理和技术栈是必要的。Windows作为最流行和最成功的操作系统,自1985年以来经历了多个版本的迭代,从1.0到最新的Windows 10。早期的...

    Eclipse入门

    **2.1 概观** Eclipse Platform是Eclipse的核心部分,它为其他插件提供了一个基本框架和一组标准服务。这些服务包括但不限于资源管理、编辑器支持、构建系统等。 **2.2 架构** Eclipse Platform采用了模块化的...

    TCP-IP详解卷2

    1.4 应用编程接口 3 1.5 程序示例 4 1.6 系统调用和库函数 6 1.7 网络实现概述 6 1.8 描述符 7 1.9 mbuf与输出处理 11 1.9.1 包含插口地址结构的mbuf 11 1.9.2 包含数据的mbuf 12 1.9.3 添加IP和UDP首部 13 1.9.4 IP...

    TCP-IP详解卷二:实现

    1.4 应用编程接口 3 1.5 程序示例 4 1.6 系统调用和库函数 6 1.7 网络实现概述 6 1.8 描述符 7 1.9 mbuf与输出处理 11 1.9.1 包含插口地址结构的mbuf 11 1.9.2 包含数据的mbuf 12 1.9.3 添加IP和UDP首部 13 1.9.4 IP...

    TCP-IP详解卷二:实现part2

    1.4 应用编程接口 3 1.5 程序示例 4 1.6 系统调用和库函数 6 1.7 网络实现概述 6 1.8 描述符 7 1.9 mbuf与输出处理 11 1.9.1 包含插口地址结构的mbuf 11 1.9.2 包含数据的mbuf 12 1.9.3 添加IP和UDP首部 13 1.9.4 IP...

    TCPIP协议详解卷二.part2.rar

    1.4 应用编程接口 3 1.5 程序示例 4 1.6 系统调用和库函数 6 1.7 网络实现概述 6 1.8 描述符 7 1.9 mbuf与输出处理 11 1.9.1 包含插口地址结构的mbuf 11 1.9.2 包含数据的mbuf 12 1.9.3 添加IP和UDP首部 13 ...

    TCPIP协议详解卷二.part1.rar

    1.4 应用编程接口 3 1.5 程序示例 4 1.6 系统调用和库函数 6 1.7 网络实现概述 6 1.8 描述符 7 1.9 mbuf与输出处理 11 1.9.1 包含插口地址结构的mbuf 11 1.9.2 包含数据的mbuf 12 1.9.3 添加IP和UDP首部 13 ...

    TCPIP协议详解卷二.part4.rar

    1.4 应用编程接口 3 1.5 程序示例 4 1.6 系统调用和库函数 6 1.7 网络实现概述 6 1.8 描述符 7 1.9 mbuf与输出处理 11 1.9.1 包含插口地址结构的mbuf 11 1.9.2 包含数据的mbuf 12 1.9.3 添加IP和UDP首部 13 ...

    TCPIP协议详解卷二.part3.rar

    1.4 应用编程接口 3 1.5 程序示例 4 1.6 系统调用和库函数 6 1.7 网络实现概述 6 1.8 描述符 7 1.9 mbuf与输出处理 11 1.9.1 包含插口地址结构的mbuf 11 1.9.2 包含数据的mbuf 12 1.9.3 添加IP和UDP首部 13 ...

    TCP-IP详解卷2:实现.rar

    1.4 应用编程接口 3 1.5 程序示例 4 1.6 系统调用和库函数 6 1.7 网络实现概述 6 1.8 描述符 7 1.9 mbuf与输出处理 11 1.9.1 包含插口地址结构的mbuf 11 1.9.2 包含数据的mbuf 12 1.9.3 添加IP和UDP首部 13 1.9.4 IP...

    TCP-IP详解-卷2实现分两部分-part2

    1.4 应用编程接口 3 1.5 程序示例 4 1.6 系统调用和库函数 6 1.7 网络实现概述 6 1.8 描述符 7 1.9 mbuf与输出处理 11 1.9.1 包含插口地址结构的mbuf 11 1.9.2 包含数据的mbuf 12 1.9.3 添加IP和UDP首部 13 1.9.4 IP...

    TCP-IP详解卷2_1.rar

    1.4 应用编程接口 3 1.5 程序示例 4 1.6 系统调用和库函数 6 1.7 网络实现概述 6 1.8 描述符 7 1.9 mbuf与输出处理 11 1.9.1 包含插口地址结构的mbuf 11 1.9.2 包含数据的mbuf 12 1.9.3 添加IP和UDP首部 13 1.9.4 IP...

    TCP-IP详解卷2:实现——2

    1.4 应用编程接口 3 1.5 程序示例 4 1.6 系统调用和库函数 6 1.7 网络实现概述 6 1.8 描述符 7 1.9 mbuf与输出处理 11 1.9.1 包含插口地址结构的mbuf 11 1.9.2 包含数据的mbuf 12 1.9.3 添加IP和UDP首部 13 1.9.4 IP...

    TCP-IP详解卷二:实现part1

    1.4 应用编程接口 3 1.5 程序示例 4 1.6 系统调用和库函数 6 1.7 网络实现概述 6 1.8 描述符 7 1.9 mbuf与输出处理 11 1.9.1 包含插口地址结构的mbuf 11 1.9.2 包含数据的mbuf 12 1.9.3 添加IP和UDP首部 13 1.9.4 IP...

    TCP-IP详解-卷2实现分两部分-part1

    1.4 应用编程接口 3 1.5 程序示例 4 1.6 系统调用和库函数 6 1.7 网络实现概述 6 1.8 描述符 7 1.9 mbuf与输出处理 11 1.9.1 包含插口地址结构的mbuf 11 1.9.2 包含数据的mbuf 12 1.9.3 添加IP和UDP首部 13 1.9.4 IP...

Global site tag (gtag.js) - Google Analytics