Go内存模型&Happen-Before(一)
一、前言
Go语言的内存模型规定了一个goroutine可以看到另外一个goroutine修改同一个变量的值的条件,这类似java内存模型中内存可见性问题。
当多个goroutine并发同时存取同一个数据时候必须把并发的存取的操作顺序化,在go中可以实现操作顺序化的工具有高级的通道(channel)通信和同步原语比如sync包中的Mutex(互斥锁)、RWMutex(读写锁)或者和sync/atomic中的原子操作。
阅读全文Go语言的内存模型规定了一个goroutine可以看到另外一个goroutine修改同一个变量的值的条件,这类似java内存模型中内存可见性问题。
当多个goroutine并发同时存取同一个数据时候必须把并发的存取的操作顺序化,在go中可以实现操作顺序化的工具有高级的通道(channel)通信和同步原语比如sync包中的Mutex(互斥锁)、RWMutex(读写锁)或者和sync/atomic中的原子操作。
阅读全文go语言类似Java JUC包也提供了一些列用于多线程之间进行同步的措施,比如低级的同步措施有 锁、CAS、原子变量操作类。相比Java来说go提供了独特的基于通道的同步措施。本节我们先来看看go中Load/Store操作
阅读全文go语言类似Java JUC包也提供了一些列用于多线程之间进行同步的措施,比如低级的同步措施有 锁、CAS、原子变量操作类。相比Java来说go提供了独特的基于通道的同步措施。本节我们先来看看go中CAS操作
阅读全文go语言类似Java JUC包也提供了一些列用于多线程之间进行同步的措施,比如低级的同步措施有 锁、CAS、原子变量操作类。相比Java来说go提供了独特的基于通道的同步措施。本节我们先来看看go中与锁相关的条件变量
阅读全文go语言类似Java JUC包也提供了一些列用于多线程之间进行同步的措施,比如低级的同步措施有 锁、CAS、原子变量操作类。相比Java来说go提供了独特的基于通道的同步措施。本节我们先来看看go中读写锁
阅读全文go语言类似Java JUC包也提供了一些列用于多线程之间进行同步的措施,比如低级的同步措施有 锁、CAS、原子变量操作类。相比Java来说go提供了独特的基于通道的同步措施。本节我们先来看看go中互斥锁.
阅读全文“分而治之“是理清思路和解决问题的一个重要的方法。大到系统架构对功能模块的拆分,小到归并排序的实现,无一不在散发着分而治之的思想。在实现分而治之的算法的时候,我们通常使用递归的方法。递归相当于把大的任务拆成多个小的任务,然后大任务等待多个小的子任务执行完成后,合并子任务的结果。一般来说,父任务依赖与子任务的执行结果,子任务与子任务之间没有依赖关系。因此子任务之间可以并发执行来提升性能。于是ForkJoinPool
提供了一个并发处理“分而治之”的框架,让我们能以类似于递归的编程方式获得并发执行的能力。
在Java中多线程之间是通过共享内存进行通信的,在go中多线程之间通信是基于消息的,go中的通道是go中多线程通信的基石。
在java中创建的线程是与OS线程一一对应的,而在go中多个协程(goroutine)对应一个逻辑处理器,每个逻辑处理器与OS线程一一对应。
每个线程要运行必须要在就绪状态情况下获取cpu,而操作系统是基于时间片轮转算法来调度线程占用cpu来执行任务的,每个OS线程被分配一个时间片来占用cpu进行任务的执行。
阅读全文DActor框架可同时支持同步和异步代码,简化在线异步代码的开发,用同步代码的思维来开发异步代码,兼顾异步代码的高并发、无阻塞和同步代码的易读性,可维护性。 基于协程思想设计 最大程度的降低阻塞,提高单个线程的处理能力,并可有效的降低线程数。
nginx(发音为“engine x”)是由俄罗斯软件工程师Igor Sysoev编写的免费开源Web服务器。自2004年公开发布以来,nginx一直专注于高性能,高并发性和低内存消耗。Web服务器功能之上的其他功能,如负载均衡,缓存,访问和带宽控制,以及与各种应用程序高效集成的能力,有助于使nginx成为现代网站架构的不错选择。目前,nginx是互联网上第二大最受欢迎的开源Web服务器。
阅读全文nginx使用散列表来快速处理静态数据集,如服务器名称、 map 指令值、MIME类型、请求头名称。在开始和每次重新配置期间,nginx会选择哈希表的最小可能大小,这样存储具有相同哈希值的键的桶大小就不会超过配置的参数(哈希桶大小)。哈希表的大小用桶表示。表的大小会持续调整直到超过 hash max size 参数。大多数哈希表都有相应的指令来更改这些参数,例如,服务器名称哈希使用 server_names_hash_max_size 和 server_names_hash_bucket_size 指令。
阅读全文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”。