- 主题:goroutine 之间是不是最好别共享数据?
rust还是用mpsc这种结构多。
【 在 CKevin 的大作中提到: 】
: rust不能修改全局变量,rust启动线程后,线程中修改的变量其所有权会移交给线程,其他线程、主线程无法再修改,多个线程之间需要使用channel通信。
: (虽然rust允许通过锁机制动态获取一个变量的所有权)
: 听起来很像你想要的效果?
: ...................
--
FROM 124.64.22.*
是 erlang 啊。不过 erlang 那种是 Actor 模型。而 goroutine 是 CPS 模型。
不过你这么一说也对。整个确实没啥必要。像 goroutine 这样,使用到外部的变量就自己维护好锁就行了。
goroutine 主要是会被调度到多个线程,如果不调度,所有 goroutine 确定性地只跑在一个线程里面,那么,连锁都不需要,直接使用就是了。
【 在 milksea 的大作中提到: 】
: erlang这种?这世上的语言已经很多了,函数式语言并发一开始就是这个路子。go的并发形式c++用库都能做个八九不离十的,搞语言还是要解决现实痛点的(比如go就是为了并发简单)
--
FROM 110.84.122.*
容器引用,mutex用arc就可以修改了
【 在 CKevin 的大作中提到: 】
: rust不能修改全局变量,rust启动线程后,线程中修改的变量其所有权会移交给线程,其他线程、主线程无法再修改,多个线程之间需要使用channel通信。
: (虽然rust允许通过锁机制动态获取一个变量的所有权)
: 听起来很像你想要的效果?
: ...................
--
FROM 180.109.88.*
官方是这样要求的 通过通信来共享数据,而不是通过共享数据通信
【 在 hgoldfish 的大作中提到: 】
: 要求 goroutine 不使用外部的变量,所有的动作都使用 chan 来通信是不是比较好的实践?
: 你们现实中写程序是这样的吗?
--
FROM 223.104.41.*
都可以
没特定要求
一般情况下 通过channel 这是官方的设计原则
【 在 hgoldfish 的大作中提到: 】
: 那现实中,你们是选择使用锁,还是使用 chan 呢?
:
--
FROM 223.104.41.*
那实际上大家是怎么做的?
官方的这个要求,在实际工作中会碰到很多麻烦吗?
【 在 nextworld8 的大作中提到: 】
: 官方是这样要求的 通过通信来共享数据,而不是通过共享数据通信
--
FROM 47.243.39.*
也不好说是要求 只能说是理念了 规范了
没有强制
【 在 hgoldfish 的大作中提到: 】
: 那实际上大家是怎么做的?
: 官方的这个要求,在实际工作中会碰到很多麻烦吗?
:
--
FROM 223.104.41.*
所以才我才问,一般 go 程序员,遵从这个理念的多吗?
【 在 nextworld8 的大作中提到: 】
: 也不好说是要求 只能说是理念了 规范了
: 没有强制
--
FROM 47.243.39.*
这就钻牛角尖了 既然都提供了 那说明都可以使用的
具体因人 因情况而变了
自信点 能解决问题而没有bug 怎么用都可以
【 在 hgoldfish 的大作中提到: 】
: 所以才我才问,一般 go 程序员,遵从这个理念的多吗?
:
--
FROM 223.104.41.*
我赞成
在golang中channel 和 锁是等价的, 都能完成并发的工作.
自己实现语言当然越简单越好
【 在 hgoldfish 的大作中提到: 】
: 那,假如,,我说假如,golang 官方要求 goroutine 不能访问外部的变量,不搞闭包,所有与其它模块的数据交换要么通过 chan 要么通过简单直接的函数调用。
: 你们会同意吗?
: 我在仿 golang 设计一门语言。
: ...................
--
FROM 36.110.18.*