`
weiqingfei
  • 浏览: 317305 次
  • 性别: Icon_minigender_1
  • 来自: 黑洞
社区版块
存档分类
最新评论

说说并发

 
阅读更多

关于并发和并行的区别,这儿不做讨论,另外并发这个词是否准确,我也不想深究,我只想描述一个都有机会被cpu临幸的现象,不管是如何实现的。

 

os和语言演化的过程就是要榨干计算机性能的过程。

 

很久以前,计算机处理任务是串行的,一件事情处理完才能处理另外一件事,那时候好单纯。

看起来还不错。

 

后来,发现计算机里的各个部件的速度并不一致,甚至差了好几个数量级,这中间尤其cpu最快,io最慢,那么如何充分利用闲置的cpu呢?

那就让多个程序一块儿运行,os负责调度哪个程序,在哪个时间段来运行。

看起来还不错啊。

 

互联网的兴起让web开发变得异常火热,每个web应用可以服务于成千十万人,每个人接入时就会启动一个process,同时访问的人数少些还能承受,

可一旦太多,os也承受不了,毕竟启动一个process花费时间也蛮多的。

这时候,就有了thread,比process轻多了,每接待一个访问,起一个thread就好了。

看起来还不错。

 

可是后来发现thread还是太重,有同时启动thread数量的限制,并且创建和切换thread也是件费时的处理。

这时候发现,其实web上数据处理并不占主流,大多数时间的等待都在io等待上,也就是说创建了多个thread,cpu也时常处于闲置状态。

这时候,事件驱动模式就来了,比如node.js,用一个线程去接待用户接入,使用异步io处理的方式,在数据准备晚之前,不停轮训,

这样虽然总的处理时间虽然不会变少,但是至少每个人都有机会接入,并且那些虽然在时间上来看晚一些访问的人,也有可能提前返回结果。

看起来还不错。

 

但是,但是(为什么还有但是呢)web虽然数据处理不占主流,并不代表没有,一点主线程进行大量计算时,轮询也就停止了,除了计算一切都停止了。

当然,你可以启多个线程来轮询,也可以把计算放到另外一个线程上,但这些都要自己实现,语言是做不了的。

如果在cpu做运算时能把运行片段让出就好了,协程好像可以,协程很轻量,随随便便就能启动成千上万,并且切换的cost也很小。

但是协程得需要用户自己来调度,os是管不了的,这哪行,谁能很好的决定要在数据处理的哪个逻辑上让出cpu呢。

 

咋办?这时候便有了golang,简直神器啊,随随便便启动多个goruntine,可以自己调度,vm还可以帮着调度,占用时间比较多的gorunting让出cpu。

一举消灭了线程重,事件驱动的单线程阻塞问题,并且不同于其它语言的协程,goruntine是可以有vm调度。

至少现在可以说是完美。

分享到:
评论

相关推荐

    45_说说一般如何设计一个高并发的系统架构?.zip

    本资料包“45_说说一般如何设计一个高并发的系统架构?”包含了关于这一主题的笔记、PPT演示文稿以及一个形象化的架构组成图片,下面将对这些知识点进行详细解释。 首先,我们要理解高并发的基本概念。高并发是指...

    7kbscan-WebPathBrute v1.6.0 最新编译版

    先说说并发线程数吧(多线程),虽然默认是20 但是加大也无妨看你自己的各个参数设置和机器网络等配置了。 超时时间自己视情况而定 也不必多介绍了。 三、这个随机xff头和xr头 套用百度上一段话 能懂得自然懂得 不...

    28_你能说说redis的并发竞争问题该如何解决吗?.zip

    Redis,一个高性能的键值数据存储系统,常用于缓存和消息队列等场景,由于其数据读写速度快,被广泛应用于高并发环境。然而,当多个客户端同时对同一个键进行操作时,可能会引发并发竞争问题,导致数据不一致或者...

    Java系统的高并发解决方法详解

    上面提供的几个解决思路在一定程度上也意味着更大的投入,并且这样的解决思路具备瓶颈,没有很好的扩展性,下面我从低成本、高性能和高扩张性的角度来说说我的一些经验。 一、HTML静态化 静态化其实大家都知道,...

    说说大型高并发高负载网站的系统架构

    说说大型高并发高负载网站的系统架构.mht

    web路径探测工具 7kbscan-WebPathBrute 1.5.8 (集成三字典)

    一、先说说并发线程数吧,虽然默认是20 但是加大也无妨看你自己的各个参数设置和机器网络等配置了。 二、超时时间自己视情况而定也不必多介绍了。 三、这个随机xff头和xr头套用百度上一段话能懂得自然懂得不懂得也...

    说说大型高并发高负载网站的系统架构.txt

    ### 大型高并发高负载网站的系统架构 随着互联网技术的发展与普及,越来越多的大型网站如门户网站等面临着巨大的挑战,特别是在处理高并发请求时。本文将深入探讨这些大型网站如何通过采用一系列技术和策略来应对高...

    说说大型高并发高负载网站的系统架构(更新)

    【大型高并发高负载网站的系统架构】 在面对大规模用户访问和高并发请求时,大型网站需要采取一系列的策略和架构设计以确保系统的稳定性和高效性。以下是一些关键的知识点: 1. **HTML静态化**: - 静态HTML页面...

    Java面试题+Java并发编程(J.U.C)+Java8实战+Redis+kafka

    『死磕Java并发编程系列』 02 面试官:说说什么是Java内存模型? 『死磕Java并发编程系列』 03 面试必问的CAS原理你会了吗? 『死磕Java并发编程系列』 04 面试官:说说Atomic原子类的实现原理? 『死磕Java并发编程...

    步骤,ip段,测试方法,并发说说gogoTester-nodejs 的实现 - subying - 博客园 - 副本1

    《gogoTester-nodejs 实现解析与并发测试详解》 gogoTester-nodejs 是一个基于Node.js实现的工具,主要用于查找Google的可用IP地址。它借鉴了原有的gogoTester项目,但采用了不同的编程语言和实现策略。以下是实现...

    QQ发表说说功能框的代码

    后端可能还需要处理并发问题,确保多用户同时发表说说时数据的一致性。 6. 数据库设计:数据库用于存储用户的说说内容。表结构设计可能包含用户ID、说说内容、发布时间等字段。为了提高查询效率,可能需要对用户ID...

    网站架构及高性能并发服务器设计

     说说大型高并发高负载网站的系统架构 28 好的案例:  eBay 的数据库分布扩展架构 68  从LiveJournal后台发展看大规模网站性能优化方法 70  中国顶级门户网站架构分析1 116   中国顶级门户网站架构分析 ...

    说说大型高并发高负载网站的系统架构设计问题

    一个小型的网站,比如个人网站,可以使用最简单的HTML静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对系统架构、性能的要求都很简单,随着互联网业务的不断丰富,网站相关...

    java并发面试题(一)

    说说对并发的理解? 答:并发是指多个任务在同一个CPU上执行,然后按照划分时间片来交替执行,在同一个时间段内,多个任务都在执行,是属于相同实体上的多个事件,并发是为了更好的利用处理器的每个核,以达到更高的...

    说说秒赞php源码

    数据库设计应考虑性能和扩展性,以应对大量并发的赞操作。 2. **API接口**:为了与QQ平台交互,源码可能需要利用QQ开放平台的API,如OAuth2进行用户授权,获取用户的基本信息和动态权限。 3. **定时任务**:24小时...

    面试官:对并发熟悉吗?说说Synchronized及实现原理.zip

    计算机技术、IT咨询、人工智能AI理论介绍,学习参考资料 计算机技术、IT咨询、人工智能AI理论介绍,学习参考资料 计算机技术、IT咨询、人工智能AI理论介绍,学习参考资料 计算机技术、IT咨询、人工智能AI理论介绍,...

    php多线程并发实现方法

    这里就来说说如果你无法操控apache的服务器,如何模拟php并发 <?php if(function_exists('date_default_timezone_set')) { date_default_timezone_set('PRC'); } function a() { $time = time(); sleep(3); ...

Global site tag (gtag.js) - Google Analytics