0%

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 要。

阅读全文 »

wrk 是一款简单的 HTTP 压测工具, 托管在 Github 上,https://github.com/wg/wrk.
wrk 的一个很好的特性就是能用很少的线程压出很大的并发量。 原因是它使用了一些操作系统特定的高性能 io 机制, 比如 select, epoll, kqueue 等。 其实它是复用了 redis 的 ae 异步事件驱动框架。 确切的说 ae 事件驱动框架并不是 redis 发明的, 它来至于 Tcl 的解释器 jim, 这个小巧高效的框架, 因为被 redis 采用而更多的被大家所熟知。

阅读全文 »

情况1 代理软件开放代理端口,虚拟机通过该端口进行代理

  1. Linux安装proxychains

    git clone https://github.com/rofl0r/proxychains-ng.git
    
    cd proxychains-ng
    
    ./configure
    make
    make install
    make install-config
    
    # make install-config 执行完毕后会输出配置文件的存放路径
    
    # 如果提示make: Nothing to be done for `all`,可以尝试执行
    make clean
  2. 配置conf

    vim /usr/local/etc/proxychains.conf
    
    # 根据代理软件具体开放的协议类型,配置代理ip和port
    
    http    本机ip 代理port
    socks5  本机ip 代理port
  3. Windows配置端口转发

    netsh interface portproxy add v4tov4 listenport=转发端口 listenaddress=监听地址 connectport=转发端口 connectaddress=转发地址
    
    # 举例
    netsh interface portproxy add v4tov4 listenport=64601 listenaddress=192.168.100.153 connectport=64601 connectaddress=127.0.0.1
    
    netsh interface portproxy show all
    
    # 查看端口转发列表
    侦听 ipv4:                 连接到 ipv4:
    
    地址            端口        地址            端口
    --------------- ----------  --------------- ----------
    192.168.100.153 64601       127.0.0.1       64601
  4. 添加防火墙入站规则,开放代理端口,为了虚拟机可以访问到本机ip+端口port

  5. 测试虚拟机是否可以走代理访问

    proxychains telnet google.com

  1. docker exec -it mysql容器名 bash

    docker exec -it mysql bash
  2. 添加 skip-grant-tables 配置

    vi /etc/mysql/conf.d/docker.cnf
    
    [mysqld]
    skip-host-cache
    skip-name-resolve
    skip-grant-tables

    如果提示vi找不到,则执行以下命令

    apt-get update && apt-get install vim -y
  3. 执行exit,退出mysql容器

  4. 执行systemctl restart docker, 重启docker

  5. docker exec -it mysql容器名 mysql 进入无密码模式的mysql中

  6. 操作你需要改动的命令

  7. 最后记得执行 flush privileges;,使你刚刚改动的内容生效

本文主要起因是,一次在微博上和朋友关于嵌套好几层的if-else语句的代码重构的讨论(微博原文),在微博上大家有各式各样的问题和想法。按道理来说这些都是编程的基本功,似乎不太值得写一篇文章,不过我觉得很多东西可以从一个简单的东西出发,到达本质,所以,我觉得有必要在这里写一篇的文章。不一定全对,只希望得到更多的讨论,因为有了更深入的讨论才能进步。

文章有点长,我在文章最后会给出相关的思考和总结陈词,你可以跳到结尾。

所谓箭头型代码,基本上来说就是下面这个图片所示的情况。

那么,这样“箭头型”的代码有什么问题呢?看上去也挺好看的,有对称美。但是……

关于箭头型代码的问题有如下几个:

1)我的显示器不够宽,箭头型代码缩进太狠了,需要我来回拉水平滚动条,这让我在读代码的时候,相当的不舒服。

2)除了宽度外还有长度,有的代码的if-else里的if-else里的if-else的代码太多,读到中间你都不知道中间的代码是经过了什么样的层层检查才来到这里的。

总而言之,“箭头型代码”如果嵌套太多,代码太长的话,会相当容易让维护代码的人(包括自己)迷失在代码中,因为看到最内层的代码时,你已经不知道前面的那一层一层的条件判断是什么样的,代码是怎么运行到这里的,所以,箭头型代码是非常难以维护和Debug的

阅读全文 »

这次重装系统(为何要重装有兴趣的可翻看上上篇)我是一万个不愿意的,因为我知道系统重装的成本有多大。就单纯装个系统来说可能只需要十几分钟,但是装系统前的准备工作(主要是备份和制作安装启动 U 盘)以及系统装完后的恢复备份、软件安装调试、系统设置等,要想完全恢复之前的使用环境,差不多得需要一天的时间。现在是晚上的 10:42,先记录下该做的一些工作,按步骤来就不会出错。

阅读全文 »