常用线程模型 actor模型是多线程的吗?
浏览量:1625
时间:2021-03-16 13:32:06
作者:admin
actor模型是多线程的吗?
Actor模型是一种通用的并发编程模型,它最大限度地利用了多线程技术。参与者采用消息模型,每个参与者最多可以同时处理一条消息,并且可以向其他参与者发送消息,保证了单独编写的原则。直接的答案是:golang是基于多线程模型的。
Golang有一个环境变量gomaxprocs,它决定go运行时最多可以启动几个线程来运行goroutine。
但是,golang中没有线程的概念,它使用协同程序,即goroutine。
我们先来看看进程、线程和协同路由的概念:::类似于线程,共享堆,而不是共享堆栈,协同路由的切换是由go调度器调度的。
因此,围棋项目是一个过程。进程中有多个线程,进程中有多个协程。一个或多个协程对应于一个线程。
为了解释GO线程模型,我们通常使用以下符号:
goroutin
manage and schedule m,P,g
从关系中,我们可以看到下图:
一个OS线程绑定到一个上下文,多个协议可以链接到一个上下文,这些协议由GO调度程序分配和调度。
Golang是单线程模型还是多线程模型?
多核多线程比单核多线程更糟糕。在多核多进程的情况下,当CPU1释放Gil后,其他CPU上的线程将竞争,但Gil可能会立即被CPU1获得,当CPU2释放Gil后,这将导致其他几个CPU上被唤醒的线程被唤醒并等待到切换时间,然后进入等待调度的状态,这将导致螺纹抖动导致效率降低。
可以看到我的标题文章“鸡肋?“Python中的多线程和多处理”对此有更详细的描述。
python多线程模型在多核情况下线程切换开销为什么到毫秒级别?
模型本身只是一组参数和框架。使用多个线程运行取决于应用程序方法,与训练无关。如果能够部署分布式计算,就可以实现多线程、多服务器的分布式计算。如果我们不能部署它,那就没办法了。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。