Strike Freedom

Live fast. Die young. Be wild. Have fun.

Discovery

申请友链

如果有兴趣和本站交换友链的同学,请在这里留言。

Linux IO 模式及 select、poll、epoll 详解

注:本文是对众多博客的学习和总结,可能存在理解错误。请带着怀疑的眼光,同时如果有错误希望能指出。 同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的。所以先限定一下本文的上下文。 本文讨论的背景是Linux环境下的network IO。 一 概念说明 在进行解释之前,首先要说明几个概念: 用户空间和内核空间 进程切换 进程的阻塞 文件描述符 缓存 I/O 用户空间与内核空间 现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方)。操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限。为了保证用户进程不能直接操作内核(kernel),保证内核的安全,操心系统将虚拟空间划分为两部分,一部分为内核空间,一部分为用户空间。针对linux操作系统而言,将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF),供内核使用,称为内核空间,而将较低的3G字节(从虚拟地址0x

次时代 Java 编程(一) Java 里的协程

什么是协程(coroutine) 这东西其实有很多名词,比如有的人喜欢称为纤程(Fiber),或者绿色线程(GreenThread)。其实最直观的解释可以定义为线程的线程。有点拗口,但本质上就是这样。 我们先回忆一下线程的定义,操作系统产生一个进程,进程再产生若干个线程 并行 的处理逻辑,线程的切换由操作系统负责调度。传统语言 C++ Java 等线程其实与操作系统线程是 1:1 的关系,每个线程都有自己的 Stack, Java 在 64 位系统默认 Stack 大小是 1024KB,所以指望一个进程开启上万个线程是不现实的。但是实际上我们也不会这么干,因为起这么多线程并不能充分的利用 CPU,大部分线程处于等待状态,CPU 也没有这么核让线程使用。所以一般线程数目都是 CPU 的核数。

Java 全文检索引擎工具包 Lucene 原理解析

Lucene 是什么? Lucene 是 apache 软件基金会 4 jakarta 项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene 的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。Lucene是一套用于全文检索和搜寻的开源程式库,由[Apache](https://ba

【译】Spark 分区机制的应用及 PageRank 算法的实现

本文翻译自 https://www.safaribooksonline.com/library/view/learning-spark/9781449359034/ch04.html 佩奇排名(PageRank),又称网页排名、谷歌左侧排名,是一种由搜索引擎根据网页之间相互的超链接计算的技术,而作为网页排名的要素之一,以Google公司创办人拉里·佩奇(Larry Page)之姓来命名。Google用它来体现网页的相关性和重要性,在[搜索

MQ 对比之 RabbitMQ vs Redis

消息队列选择:RabbitMQ & Redis RabbitMQ RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现的产品,RabbitMQ是一个消息代理,从“生产者”接收消息并传递消息至“消费者”,期间可根据规则路由、缓存、持久化消息。“生产者”也即message发送者以下简称P,相对应的“消费者”乃message接收者以下简称C,message通过queue由P到C,queue存在于RabbitMQ,可存储尽可能多的message,多个P可向同一queue发送message,多个C可从同一个queue接收message RabbitMQ架构:

NoSQL 数据库的分布式算法

本文译自 Distributed Algorithms in NoSQL Databases 原文:NoSQL数据库的分布式算法 系统的可扩展性是推动NoSQL运动发展的的主要理由,包含了分布式系统协调,故障转移,资源管理和许多其他特性。这么讲使得NoSQL听起来像是一个大筐,什么都能塞进去。尽管NoSQL运动并没有给分布式数据处理带来根本性的技术变革,但是依然引发了铺天盖地的关于各种协议和算法的研究以及实践。正是通过这些尝试逐渐总结出了一些行之有效的数据库构建方法。在这篇文章里,我将针对NoSQL数据库的分布式特点进行一些系统化的描述。 接下来我们将研究一些分布式策略,比如故障检测中的复制,这些策略用黑体字标出,被分为三段: 数据一致性。NoSQL需要在分布式系统的一致性,容错性

Java I/O 模型从 BIO 到 NIO 和 Reactor 模式解析

Java I/O模型 同步 vs. 异步 同步I/O 每个请求必须逐个地被处理,一个请求的处理会导致整个流程的暂时等待,这些事件无法并发地执行。用户线程发起I/O请求后需要等待或者轮询内核I/O操作完成后才能继续执行。 异步I/O 多个请求可以并发地执行,一个请求或者任务的执行不会导致整个流程的暂时等待。用户线程发起I/O请求后仍然继续执行,当内核I/O操作完成后会通知用户线程,或者调用用户线程注册的回调函数。 阻塞 vs. 非阻塞 阻塞 某个请求发出后,由于该请求操作需要的条件不满足,请求操作一直阻塞,不会返回,直到条件满足。 非阻塞 请求发出后,若该请求需要的条件不满足,则立即返回一个标志信息告知条件不满足,而不会一直等待。一般需要通过循环判断请求条件是否满足来获取请求结果。 需要注意的是,阻塞并不等价于同步,而非阻塞并非等价于异步。事实上这两组概念描述的是I

周杰伦的《烟花易冷》和《洛阳伽蓝记》的前世今生

《烟花易冷》的前世今生 《烟花易冷》这首歌发行之时我便已听过了,按照周董『一张专辑一首中国风』的传统,《烟花易冷》便作为专辑《跨时代》的中国风歌曲面世,一曲终了,并没有初听《东风破》、《青花瓷》和《菊花台》这些前作般的惊艳之感,不仅如此,因为周杰伦在演绎这首歌时的不同于以往的唱腔 — 低沉阴冷,可能许多不常听周杰伦的人都会问:这是周杰伦唱的吗?甚至我这个老歌迷也觉得这的确是他刻意做的改变,所以当时并没有对这首歌有太多的青睐,就觉着是周杰伦的一首风格『奇怪』的中国风,也便止于此了。 前阵子,网易云『每日推荐』里给我推了这一首《烟花易冷》,重听之后,与几年前的感受很不一样,似乎听出了《东风破》的哀愁、《发如雪》的凄美、《青花瓷》的婉转,歌词也写出了一种败落、苍凉的感觉,而且歌词的故事性居然还比较完整,要知道方文山的中国风歌词那都是走的是印象画派、意识流小说这种风格 — 意象丰富、故事零碎。这倒是激起了我的兴趣,我上网搜了一下

Tornado 配合 Celery 及 Rabbitmq 实现 web requests 异步非阻塞

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

深入 Go 语言之 goroutine 并发控制与通信

开发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算法并做了适当修改, 主要分两部分: 计算电影的相似度:利用调整的余弦相似度计算方法; 相似度加权求和:使用用户已打分的电影的分数进行加权求和,权值为用户未打分的各电影与打分的各电影的相似度,然后对所有相似度的和求平均。 系统详细设计 离线计算推荐电影模块 系统所用算法 本系统采用协同过滤(Collaborative Filtering)推荐算法。协同过滤推荐算法分为预测过程和推荐过程,其包括Item-based算法和User-based算法,但经查阅相关资料发现User-based算法存在两个问题: 数据的稀疏性:一个大型的电影推荐系统会有大量的电影信息,用户已打分的电影可能只占总量的很少一部分,不同用户之间电影打分的重叠性较低,导致算法无法找到一个兴趣用户; 算法的扩展性:最近邻算法的计算量会随着用户和电影信息数量的增加而增加,不适合信息量大的情况。所以本系统采用了Item-based协同过滤算法,并对其做了适当修改。

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

读史,动容莫过于见证一个一个悲剧的发生。 诸葛孔明 读《三国演义》之时,我感觉像是亲历了孔明一生的大起大落,从踌躇满志辅佐刘皇叔兴复汉室,到最后回天无力命陨五丈原,可悲,可叹,可泪。 卧龙翔天 汉灵帝光和四年,孔明诞生于琅邪阳都。 建安四年,孔明与友人徐庶等从师水镜先生司马徽,这一年,孔明 19 岁。 建安十二年,刘备前往襄阳(今湖北襄樊)三顾茅庐,孔明对刘备陈说《隆中对》,详尽描述了他的三分天下之计。随即出山辅助刘备,这一年,孔明 27 岁。 同年,孔明出山第一战,火烧博望坡,彼时的曹孟德

Live fast. Die young. Be wild. Have fun.

© 2020 Strike Freedom

Powered by Bolo
Theme bolo-sakura by Mashiro
浏览 539909 文章 45 评论 156

SCHEME TOOL