文章目录

潘少的 BLOG

诗酒趁年华

存档: 2018 年 05 月 (7)

Goroutine并发调度模型深度解析之手撸一个高性能协程池 置顶!

并发(并行),一直以来都是一个编程语言里的核心主题之一,也是被开发者关注最多的话题;Go语言作为一个出道以来就自带 『高并发』光环的富二代编程语言,它的并发(并行)编程肯定是值得开发者去探究的,而Go语言中的并发(并行)编程是经由goroutine实现的,goroutine是golang最重要的特性之一,具有使用成本低、消耗资源低、能效高等特点,官方宣称原生goroutine并发成千上万不成问题,于是它也成为Gopher们经常使用的特性。

Goroutine是优秀的,但不是完美的,在极大规模的高并发场景下,也可能会暴露出问题,什么问题呢?又有什么可选的解决方案?本文将通过runtime对goroutine的调度分析,帮助大家理解它的机理和发现一些内存和调度的原理和问题,并且基于此提出一种个人的解决方案 — 一个高性能的Goroutine Pool(协程池)。

G-P-M模型

tornado配合celery及rabbitmq实现web request异步非阻塞

CeleryRabitMQDiagram.png

Tornado和Celery介绍

1.Tornado

Tornado是一个用python编写的一个强大的、可扩展的异步HTTP服务器,同时也是一个web开发框架。tornado是一个非阻塞式web服务器,其速度相当快。得利于其非阻塞的方式和对 epoll的运用,tornado每秒可以处理数以千计的连接,这意味着对于实时web服务来说,tornado是一个理想的web框架。它在处理严峻的网络流量时表现得足够强健,但却在创建和编写时有着足够的轻量级,并能够被用在大量的应用和工具中。
进一步了解和学习tornado可移步:tornado官方文档

2.Celery

Celery 是一个简单、灵活且可靠的,处理大量消息的分布式系统,它是一个专注于实时处理的任务队列, 同时也支持任务调度。Celery 中有两个比较关键的概念:

  • Worker: worker 是一个独立的进程,它持续监视队列中是否有需要处理的任务;
  • Broker: broker 也被称为中间人或者协调者,br

深入golang之---goroutine并发控制与通信

Context调用链路

开发go程序的时候,时常需要使用goroutine并发处理任务,有时候这些goroutine是相互独立的,而有的时候,多个goroutine之间常常是需要同步与通信的。另一种情况,主goroutine需要控制它所属的子goroutine,总结起来,实现多个goroutine间的同步与通信大致有:

  • 全局共享变量
  • channel通信(CSP模型)
  • Context包

本文章通过goroutine同步与通信的一个典型场景-通知子goroutine退出运行,来深入讲解下golang的控制并发。

通知多个子goroutine退出运行

goroutine作为go语言的并发利器,不仅性能强劲而且使用方便:只需要一个关键字go即可将普通函数并发执行,且goroutine占用内存极小(一个goroutine只占2KB的内存),所以开发go程序的时候很多开发者常常会使用这个并发工具,独立的并发任务比较简单,只需要用go关键字修饰函数就可以启用一个goroutine直接运行;但是,实际的并发场景常常是需要进行协程间的同步与通信,以及精确控制子goroutine开始和

协同过滤Item-based算法实现电影推荐系统

摘要: 采用离线式计算推荐给每位用户的电影,采用Item-based算法并做了适当修改,
主要分两部分:

  1. 计算电影的相似度:利用调整的余弦相似度计算方法;
  2. 相似度加权求和:使用用户已打分的电影的分数进行加权求和,权值为用户未打分的各电影与打分的各电影的相似度,然后对所有相似度的和求平均。

系统详细设计

离线计算推荐电影模块

系统所用算法

本系统采用协同过滤(Collaborative Filtering)推荐算法。协同过滤推荐算法分为预测过程和推荐过程,其包括Item-based算法和User-based算法,但经查阅相关资料发现User-based算法存在两个问题:

  1. 数据的稀疏性:一个大型的电影推荐系统会有大量的电影信息,用户已打分的电影可能只占总量的很少一部分,不同用户之间电影打分的重叠性较低,导致算法无法找到一个兴趣用户;
  2. 算法的扩展性:最近邻算法的计算量会随着用户和电影信息数量的增加而增加,不适合信息量大的情况。所以本系统采用了Item-based协同过滤算法,并对其做了适当修改。

计算过程

读史时哪些故事让你动容?

读史,动容莫过于见证一个一个悲剧的发生。

诸葛孔明

读《三国演义》之时,我感觉像是亲历了孔明一生的大起大落,从踌躇满志辅佐刘皇叔兴复汉室,到最后回天无力命陨五丈原,可悲,可叹,可泪。
意气风发

卧龙翔天

  • 汉灵帝光和四年,孔明诞生于琅邪阳都。
  • 建安四年,孔明与友人徐庶等从师水镜先生司马徽,这一年,孔明19岁。
  • 建安十二年,刘备前往襄阳(今湖北襄樊)三顾茅庐,孔明对刘备陈说《隆中对》,详尽描述了他的三分天下之计。随即出山辅助刘备,这一年,孔明27岁。
  • 同年,孔明出山第一战,火烧博望坡,彼时的曹孟德

精品国漫荟萃之3D动画篇

传说江湖中有一条漫画鄙视链:日漫粉鄙视美漫粉,美漫粉鄙视国漫粉,国漫粉鄙视其他所有粉...

国漫比不上日漫美漫这是事实,整个产业真正发展起来才没几年而且整个产业非常浮躁,很少有业内人能真正静下心来制作一部优秀的国漫,所以质量普遍不如日漫也得承认,但是,国漫产业也在慢慢好转,近些年也不断有优秀的作品涌现,非常值得关注,我虽然也经常看日漫,但也追国漫中的精品,也算有些心得,在这里给大家推荐几部当前国漫中的优秀作品,有兴趣的可以去看一看,希望国漫崛起不仅仅是一句口号而已。

3D动画

秦时明月

秦时明月

故事概要

易水河畔,墨家巨子、燕国太子丹为阻止秦灭六国的步伐,遣使天下第一刺客荆轲前往咸阳刺杀秦王嬴政。荆轲刺秦,一是为了阻挡秦灭六国,二是因为他的恋人—天下第一美人丽姬被嬴政虏去为妃,彼时,丽姬已身怀六甲,腹中胎儿便是荆轲之子荆天明。剑圣盖聂,天下第一剑客

精品国漫荟萃之2D动画篇

2D动画

一人之下

《一人之下》是2015年2月26日开始在网络平台腾讯动漫上连载的一部网络漫画作品,作者是米二。2016年8月开始由浙江人民美术出版社发售漫画单行本。动画《一人之下》改编自米二创作的同名网络漫画,动画由日本动画公司Pandanium负责制作。中国网络版于2016年7月8日起每周五在版权网站更新国语版;7月15日起每周五更新日语版。日本电视版于2016年7月9日起每周六20:00在 TOKYO MX 首播,全12话。

《一人之下2》之罗天大醮于2017年10月27日起在网络更新,动画制作更换为上海绘界文化传播有限公司。

作者米二,漫画界人称二叔,擅长细腻的人物性格刻画、紧凑巧妙的剧情设计以及浓烈的国风,代表作有《Project大爱》、《九九八十一》、《一人之下》等,自其漫画在网络连载以来,累积人气超过百亿,2013年被列为中国漫画作家富豪榜第七名,《一人之下》将中国超能力者、道家武学体系、八卦玄学、《西游记》别解、传