golang 是单进程的吗?

2023-10-17 13:55:56 +08:00
 chaleaochexist

我在一个 goroutine 修改环境变量, 想在其他所有 goroutine 中生效? 可以吗?

5882 次点击
所在节点    Go 编程语言
85 条回复
tonghuashuai
2023-10-18 10:52:22 +08:00
跟 GOMAXPROCS 有关吧,GOMAXPROCS 默认为 CPU 核心数,GOMAXPROCS 参数来确定线程数。
然后 Go 运行时调度使用 m:n 策略,复用 m 个 goroutine 到 n 个线程。
chaleaochexist
2023-10-18 10:52:56 +08:00
@qwq11 还有就是其实不需要信号量和读写锁. 这个和我的具体业务有关. 具体就不展开讲了.
Jooeeee
2023-10-18 11:14:27 +08:00
语言跟操作系统是两码事儿,进程分为线程,线程使用一小块内存构造 goroutine ,由于进程的所有现成共享内存,因此 goroutine 可以在不同的线程上跑。golang 可以在 goroutine 中启动新的进程
mightybruce
2023-10-18 15:23:50 +08:00
你选择用环境变量实现,可以说是非常差的方式, 有非常多的方式可以实现
1. 服务通过读取一些第三方配置中心来动态改变,比如 etcd, nacos
2. 服务中直接写一个 http 控制服务,接受请求直接切换。
dyllen
2023-10-31 10:36:06 +08:00
单进程多线程,编译一个 exe 出来,只有一个进程,系统线程默认是和 cpu 核数是相等的,一个 goroutine 的执行是在线程里面执行的,不一定是哪个线程。go 的 goroutine 是共享内存的,一个全局变量可以多个 goroutine 修改和读取,会互相影响。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/982738

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX