- 主题:goroutine 之间是不是最好别共享数据?
要求 goroutine 不使用外部的变量,所有的动作都使用 chan 来通信是不是比较好的实践?
你们现实中写程序是这样的吗?
--
FROM 110.84.122.*
显然没必要如此啊。那些锁啊,waitgroup啊,都可以用的。只是说理论上chan都可以模拟这些机制,但直接用已经封装好的不是更好吗。
【 在 hgoldfish 的大作中提到: 】
: 要求 goroutine 不使用外部的变量,所有的动作都使用 chan 来通信是不是比较好的实践?
: 你们现实中写程序是这样的吗?
--
FROM 111.199.107.*
很难完全避免 但是不共享就没锁 性能好
--
FROM 36.110.6.*
那现实中,你们是选择使用锁,还是使用 chan 呢?
【 在 abadcafe 的大作中提到: 】
: 显然没必要如此啊。那些锁啊,waitgroup啊,都可以用的。只是说理论上chan都可以模拟这些机制,但直接用已经封装好的不是更好吗。
--
FROM 47.243.39.*
哪个方便用哪个,如果都方便就选自己最熟的那个,不纠结。
【 在 hgoldfish 的大作中提到: 】
: 那现实中,你们是选择使用锁,还是使用 chan 呢?
:
--
FROM 114.246.239.*
那,假如,,我说假如,golang 官方要求 goroutine 不能访问外部的变量,不搞闭包,所有与其它模块的数据交换要么通过 chan 要么通过简单直接的函数调用。
你们会同意吗?
我在仿 golang 设计一门语言。
【 在 abadcafe 的大作中提到: 】
: 哪个方便用哪个,如果都方便就选自己最熟的那个,不纠结。
--
FROM 110.84.122.*
rust不能修改全局变量,rust启动线程后,线程中修改的变量其所有权会移交给线程,其他线程、主线程无法再修改,多个线程之间需要使用channel通信。
(虽然rust允许通过锁机制动态获取一个变量的所有权)
听起来很像你想要的效果?
是否同意呢?实际使用上,其他语言可以在init阶段初始化各个全局client,比如数据库、远端服务等,这在rust中会变得很麻烦,虽然也不是不行。。。
另外就是要收集各个worker线程的结果,不方便用容器,又不想用通信机制,最后要么闭包+map reduce,要么开个大数组给每个worker一个切片搞了,挺丑。。。
当然我这是只学了几个月rust的粗浅感受,肯定不是最佳实践。但是和写python,哪怕是和写go比,也是非常蛋疼的感受
【 在 hgoldfish 的大作中提到: 】
: 那,假如,,我说假如,golang 官方要求 goroutine 不能访问外部的变量,不搞闭包,所有与其它模块的数据交换要么通过 chan 要么通过简单直接的函数调用。
: 你们会同意吗?
: 我在仿 golang 设计一门语言。
: ...................
--
FROM 223.160.128.*
大部分是chan
【 在 hgoldfish 的大作中提到: 】
: 那现实中,你们是选择使用锁,还是使用 chan 呢?
--
FROM 123.120.184.*
这种情况下,是不是可以为这个数据库连接池单独开个 goroutine. 从 chan 里面接收消息,需要个连接时,就向 chan 投递消息,返回一条连接,不需要这条连接了,就通过 chan 把消息退还给连接池?
同理,一个远程 RPC 的连接也是类似。
【 在 CKevin 的大作中提到: 】
: rust不能修改全局变量,rust启动线程后,线程中修改的变量其所有权会移交给线程,其他线程、主线程无法再修改,多个线程之间需要使用channel通信。
: (虽然rust允许通过锁机制动态获取一个变量的所有权)
: 听起来很像你想要的效果?
: ...................
--
FROM 110.84.122.*
erlang这种?这世上的语言已经很多了,函数式语言并发一开始就是这个路子。go的并发形式c++用库都能做个八九不离十的,搞语言还是要解决现实痛点的(比如go就是为了并发简单)
【 在 hgoldfish 的大作中提到: 】
: 那,假如,,我说假如,golang 官方要求 goroutine 不能访问外部的变量,不搞闭包,所有与其它模块的数据交换要么通过 chan 要么通过简单直接的函数调用。
:
: 你们会同意吗?
: ...................
--
FROM 124.64.22.*