Go内存模型&Happen-Before(一)

一、前言

Go语言的内存模型规定了一个goroutine可以看到另外一个goroutine修改同一个变量的值的条件,这类似java内存模型中内存可见性问题。

当多个goroutine并发同时存取同一个数据时候必须把并发的存取的操作顺序化,在go中可以实现操作顺序化的工具有高级的通道(channel)通信和同步原语比如sync包中的Mutex(互斥锁)、RWMutex(读写锁)或者和sync/atomic中的原子操作。

阅读全文

Go并发编程之美- Load/Store操作

一、前言

go语言类似Java JUC包也提供了一些列用于多线程之间进行同步的措施,比如低级的同步措施有 锁、CAS、原子变量操作类。相比Java来说go提供了独特的基于通道的同步措施。本节我们先来看看go中Load/Store操作

阅读全文

Go并发编程之美-CAS操作

一、前言

go语言类似Java JUC包也提供了一些列用于多线程之间进行同步的措施,比如低级的同步措施有 锁、CAS、原子变量操作类。相比Java来说go提供了独特的基于通道的同步措施。本节我们先来看看go中CAS操作

阅读全文

代码瘦身优化实践

史蒂夫.乔布斯说,”复杂的终极境界是简单“,同样的优雅的代码一定是精简明了,可读性好。


阅读全文

Go并发编程之美-条件变量

一、前言

go语言类似Java JUC包也提供了一些列用于多线程之间进行同步的措施,比如低级的同步措施有 锁、CAS、原子变量操作类。相比Java来说go提供了独特的基于通道的同步措施。本节我们先来看看go中与锁相关的条件变量

阅读全文

Go并发编程之美-读写锁

一、前言

go语言类似Java JUC包也提供了一些列用于多线程之间进行同步的措施,比如低级的同步措施有 锁、CAS、原子变量操作类。相比Java来说go提供了独特的基于通道的同步措施。本节我们先来看看go中读写锁

阅读全文

Go并发编程之美-互斥锁

一、前言

go语言类似Java JUC包也提供了一些列用于多线程之间进行同步的措施,比如低级的同步措施有 锁、CAS、原子变量操作类。相比Java来说go提供了独特的基于通道的同步措施。本节我们先来看看go中互斥锁.

阅读全文

ForkJoinPool 探索

介绍

“分而治之“是理清思路和解决问题的一个重要的方法。大到系统架构对功能模块的拆分,小到归并排序的实现,无一不在散发着分而治之的思想。在实现分而治之的算法的时候,我们通常使用递归的方法。递归相当于把大的任务拆成多个小的任务,然后大任务等待多个小的子任务执行完成后,合并子任务的结果。一般来说,父任务依赖与子任务的执行结果,子任务与子任务之间没有依赖关系。因此子任务之间可以并发执行来提升性能。于是ForkJoinPool提供了一个并发处理“分而治之”的框架,让我们能以类似于递归的编程方式获得并发执行的能力。

阅读全文

go并发编程之美(一)

一、前言

在Java中多线程之间是通过共享内存进行通信的,在go中多线程之间通信是基于消息的,go中的通道是go中多线程通信的基石。

在java中创建的线程是与OS线程一一对应的,而在go中多个协程(goroutine)对应一个逻辑处理器,每个逻辑处理器与OS线程一一对应。

每个线程要运行必须要在就绪状态情况下获取cpu,而操作系统是基于时间片轮转算法来调度线程占用cpu来执行任务的,每个OS线程被分配一个时间片来占用cpu进行任务的执行。

阅读全文

基于Java的轻量级异步编程框架

DActor

Introduction

DActor框架可同时支持同步和异步代码,简化在线异步代码的开发,用同步代码的思维来开发异步代码,兼顾异步代码的高并发、无阻塞和同步代码的易读性,可维护性。 基于协程思想设计 最大程度的降低阻塞,提高单个线程的处理能力,并可有效的降低线程数。

阅读全文

《开源软件架构》中nginx章节

原文链接

nginx

Andrew Alexeev

nginx(发音为“engine x”)是由俄罗斯软件工程师Igor Sysoev编写的免费开源Web服务器。自2004年公开发布以来,nginx一直专注于高性能,高并发性和低内存消耗。Web服务器功能之上的其他功能,如负载均衡,缓存,访问和带宽控制,以及与各种应用程序高效集成的能力,有助于使nginx成为现代网站架构的不错选择。目前,nginx是互联网上第二大最受欢迎的开源Web服务器。

阅读全文

11张PPT介绍Paxos协议


阅读全文

《nginx官方文档》设置哈希表

原文链接

nginx使用散列表来快速处理静态数据集,如服务器名称、 map 指令值、MIME类型、请求头名称。在开始和每次重新配置期间,nginx会选择哈希表的最小可能大小,这样存储具有相同哈希值的键的桶大小就不会超过配置的参数(哈希桶大小)。哈希表的大小用桶表示。表的大小会持续调整直到超过 hash max size 参数。大多数哈希表都有相应的指令来更改这些参数,例如,服务器名称哈希使用 server_names_hash_max_size 和 server_names_hash_bucket_size 指令。

阅读全文

《Nginx官方文档》连接处理方法

nginx支持多种连接处理方法。特定方法的可用性取决于所使用的平台。在支持多种方法的平台上,nginx通常会自动选择最高效的方法。但是,如果有需要,可以使用 use 指令显式地选择连接处理方法。

阅读全文

《nginx官方文档》记录日志到syslog

原文链接

error_log 和access_log 指令支持将日志记录到syslog。以下参数将日志配置到syslog:server=address 参数定义syslog服务器的地址。地址可以指定为域名或IP地址,端口可选,也可以指定为带“unix:”前缀的 UNIX-domain socket 路径。如果未指定端口,则使用UDP 514 端口。如果一个域名解析为多个IP地址,则使用第一个解析的地址。 facility=string参数设置在 RFC 3164 中定义的syslog消息设施。设施可以是 “kern”, “user”, “mail”, “daemon”, “auth”, “intern”, “lpr”, “news”, “uucp”, “clock”, “authpriv”, “ftp”, “ntp”, “audit”, “alert”, “cron”, “local0”..“local7”中的一个。默认设置是“local7”。

阅读全文

return top