JiaHe's Blog

读万卷书,行万里路

OK,如果你还在为并发(concurrency)和并行(parallelism)这两个词的区别而感到困扰,那么这篇文章就是写给你看的。搞这种词语辨析到底有什么意义?其实没什么意义,但是有太多人在混用错用这两个词(比如遇到的某门课的老师)。不论中文圈还是英文圈,即使已经有数不清的文章在讨论并行 vs 并发,却极少有能讲清楚的。让一个讲不清楚的人来解释,比不解释更可怕。比如我随便找了个网上的解释:

前者是逻辑上的同时发生(simultaneous),而后者是物理上的同时发生.

并发性 (concurrency),又称共行性,是指能处理多个同时性活动的能力,并发事件之间不一定要同一时刻发生。

并行 (parallelism) 是指同时发生的两个并发事件,具有并发的含义,而并发则不一定并行。

来个比喻:并发和并行的区别就是一个人同时吃三个馒头和三个人同时吃三个馒头。

看了之后,你懂了么?不懂,更晕了。写出这类解释的人,自己也是一知半解,却又把自己脑子里模糊的影像拿出来写成文章,让读者阅毕反而更加疑惑。当然也有可能他确实懂了,但是写出这种文字也不能算负责。至于本文,请相信,一定是准确的,我也尽量做到讲解清晰。

OK,下面进入正题,concurrency vs parallelism

阅读全文 »

本文将介绍微服务架构和相关的组件,介绍他们是什么以及为什么要使用微服务架构和这些组件。本文侧重于简明地表达微服务架构的全局图景,因此不会涉及具体如何使用组件等细节。

要理解微服务,首先要先理解不是微服务的那些。通常跟微服务相对的是单体应用,即将所有功能都打包成在一个独立单元的应用程序。从单体应用到微服务并不是一蹴而就的,这是一个逐渐演变的过程。本文将以一个网上超市应用为例来说明这一过程。

阅读全文 »

Flexbox 布局 已是目前最为流行的 Web 布局方式之一,它给 Web 开发者在完成页面或组件的 UI 布局带来了极大的灵活性和便利性。但也是因为它有极大的灵活性,里面隐藏了一些不为人知的细节,如果不是对 Flexbox 极为熟悉或者对其规范极为了解的话,其中有很多细节将会被遗漏,而这些细节又会让你在使用的感到困惑,甚至是带来一定的麻烦。

这次在优化 imgcook 的 Flexbox 布局时,重新阅读了一次 Flexbox 的规范,发现自己曾忽略了部分重要信息。为此在这篇文章中,将 Flexbox 布局CSS 的书写模式逻辑属性,对齐方式结合在一起整理了一篇笔记,希望对于想了解或使用 Flexbox 碰到痛楚的同学有所帮助。

阅读全文 »

我是 Redis

你好,我是 Redis,一个叫 Antirez 的男人把我带到了这个世界上。

说起我的诞生,跟关系数据库 MySQL 还挺有渊源的。

在我还没来到这个世界上的时候,MySQL 过的很辛苦,互联网发展的越来越快,它容纳的数据也越来越多,用户请求也随之暴涨,而每一个用户请求都变成了对它的一个又一个读写操作,MySQL 是苦不堪言。尤其是到 “双 11”、“618“这种全民购物狂欢的日子,都是 MySQL 受苦受难的日子。

据后来 MySQL 告诉我说,其实有一大半的用户请求都是读操作,而且经常都是重复查询一个东西,浪费它很多时间去进行磁盘 I/O。

后来有人就琢磨,是不是可以学学 CPU,给数据库也加一个缓存呢?于是我就诞生了!

出生不久,我就和 MySQL 成为了好朋友,我们俩常常携手出现在后端服务器中。

应用程序们从 MySQL 查询到的数据,在我这里登记一下,后面再需要用到的时候,就先找我要,我这里没有再找 MySQL 要。

阅读全文 »