处理并发的方式

并发,就会出现竞争问题,下面是几种常见的处理方式:

  • 加锁。所有的参与者竞争同一个锁,持有锁的参与者可以对资源进行操作。如果资源满足读和写可以分离的条件,可以使用读写锁来 提高读的并发数量。

  • 单线程顺序执行。Redis的处理IO的线程就是这样操作的,因为Redis属于I/O密集型应用而不是CPU密集型应用,所以虽然是单线程, CPU仍然不会是性能瓶颈,单线程的好处就在于处理请求的时候,一个一个按顺序来,所以无需加锁,可以简化实现。

  • 原子操作。参考Go中的 sync/atomic 包。使用加锁的方式,在持有锁的时间内,可以进行多个操作,而原则操作通常是一条语句, 例如把某个整数加上n,例如当某个数等于m时,复制为n等等。


更多文章
  • 搭建samba服务器
  • ssh时自动运行tmux
  • ufw简明教程
  • zerotier简明教程
  • 提取kindle笔记
  • 一个Golang gRPC握手错误的坑
  • Golang(Go语言)爬虫框架colly简明教程及源码阅读与分析
  • 选择合适的技术栈
  • Golang的template(模板引擎)简明教程
  • 毕业三年,一路走来
  • 代码的坏味道
  • 消息分帧(字符串设计或协议设计)的两种形式
  • C, Go, Python的错误处理和异常机制杂谈
  • 好的命名是最好的文档
  • 读《系统之美:决策者的系统思考》