请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

不同请求来了后 同一个变量在不同的请求中是相同的吗?共享内存是指变量能通用?

比如我在代码里定义了 var a=4, 第一个请求访问a时改变了a的值,那第二个请求访问a,a的值应该还是4啊,不知道我理解的对不对。不太理解本章所说的共享内存是啥意思

正在回答 回答被采纳积分+3

1回答

艾文西 2018-08-29 15:47:47

共享内存指的是在并发操作下同一个内存数据被多个协程/线程共同访问。

不只是stack上的变量,heap上的也会有共享访问问题。在这种消息同步机制下,容易出现race condition,避免race condition就要加锁,无论从实现和可维护性来说都是比较低的。

共享通道是所谓的csp模型下比较优雅的实现方式,这也是go的优势,通过channel把信息同步给每个协程而不是通过读写同一个变量。建议下来找一些csp相关的内容看下

0 回复 有任何疑惑可以回复我~
  • 提问者 pplegend #1
    恩,你说的我基本理解了,但我还有个问题,go是多线程的语言,那我一个请求过去后 go怎么知道我是要用线程还是再开个进程,这个是哪里控制的?go 不会只用一个进程吧?
    回复 有任何疑惑可以回复我~ 2018-08-29 17:41:21
  • 艾文西 回复 提问者 pplegend #2
    你首先要分清楚线程和进程的关系以及区别。一个go程序启动的时候永远都是一个进程。至于一个请求进来,到底是一个协程处理还是顺序阻塞式处理,那是程序实现的问题,怎么实现的就怎么处理
    回复 有任何疑惑可以回复我~ 2018-08-29 21:15:12
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信