当前位置: 首页 > 面试题库 >

Golang中runtime.LockOSThread的好处

丁沛
2023-03-14
问题内容

Golang支持LockOSThread()将当前的goroutine专门绑定到当前的OS线程,它也可以UnlockOSThread()

是否有任何使用案例可以从此功能中受益?


问题答案:

使用Go线程模型时,对C代码,汇编代码或阻塞系统调用的调用与通过Go运行时调度程序管理的调用Go代码在同一线程中发生。

os.LockOSThread()当Go必须与某些外部库(例如C库)接口时,该机制最有用。它保证将在同一线程中完成对该库的多次连续调用。

这在几种情况下很有趣:

  • 许多图形库(OS X Cocoa,OpenGL,SDL等)都要求所有调用都在特定线程(某些情况下是主线程)上进行。

  • 一些外部库基于线程本地存储(TLS)功能。它们在连接到线程的数据结构中存储一些上下文。或API的某些功能提供了其内存生命周期附加到线程的结果。Windows和类似Unix的系统都使用此概念。一个典型的例子是C库中常用的errno全局变量,用于存储错误代码。在支持多线程的系统上,errno通常定义为线程局部变量

  • 更一般地,某些外部库可能使用线程标识符来索引/管理内部资源。



 类似资料:
  • 总结下一二面问题: 二面,只问了做的项目。问的很细 一面:问了项目,手撕了两道题。八股就问了,http变迁(不会),tcp三次握手。 好像就这么多 基本上都是问的项目。二面问的超细。

  • 问题内容: 我有一个代码, 我使用运行时锁定-解锁,因为我不希望例程1的打印与例程2混合使用。但是,执行上述代码后,其输出与没有锁定- 解锁的输出相同(意味着打印输出混合在一起)。谁能帮助我为什么这件事发生以及如何迫使这件事发生。 注意:我举了一个打印示例,但是有很多打印和发送事件。 问题答案: 如果您要 序列化 “打印某物”,例如,每个“打印某物”应自动执行,则只需对其进行 序列化即可 。 您可

  • 问题内容: 给出以下代码: 以 主要 方式完成的组件连接是否正确,将依赖关系连接在一起?看来我在代码中有点用完了。有没有比这更好的通用模式了?还是我想得太多? 问题答案: 是的,facebookgo注入库允许您接受注入的成员,并将为您连接图表。 代码:https://github.com/facebookgo/inject 文档:https : //godoc.org/github.com/fac

  • 八股(一点golang没问) 你了解微服务吗 B+树插入、删除 Mysql索引优化 mysql除了索引优化,还有没有其他优化 mysql有没有做过分表分库 Redis所有数据类型 Zset的底层数据结构 输入URL的整个过程 项目 你为什么做这个项目 为什么使用nginx(说了反代理,以及负载均衡) Nginx支持哪些负载均衡算法 算法(两道) 一个整型数组,找到所有满足和为target的子集(用

  • 问题内容: 阅读了许多教程之后,我发现有很多方法可以在Go中的预准备语句上绑定参数,其中一些方法 第一个问题 ,跨数据库绑定参数的方法是什么?(适用于任何数据库) 第二个问题 ,我没有阅读过有关语句的教程,如何正确绑定-statement的参数? 第三个问题 ,也没有一个给出声明的例子,如何正确绑定声明的参数? 问题答案: 跨数据库绑定参数的方式是什么? 对于数据库/ sql,没有任何内容。每个数

  • 问题内容: 我正在使用Go和Yahoo API构建股票报价网络应用。 问题是如何在数组和单个结构之间切换而无需编写另一个结构。我不确定如何用语言解释它。这是示例: 从Yahoo API获得一个符号引号如下所示: 从Yahoo API获取多个报价: 不同之处在于引号成为一个数组。 使用时如何处理? 我的结构看起来像: 我是否需要编写另一个结构来处理数组? 问题答案: 通过覆盖控制解组过程。 http